﻿Imports Commander_Wars.Spieletools
Public Enum Baulisten
    ''' <summary>
    ''' Die Commander Wars 1 Bauliste
    ''' </summary>
    ''' <remarks></remarks>
    AW
    ''' <summary>
    ''' Die Bauliste aus Advance Wars DC
    ''' </summary>
    ''' <remarks></remarks>
    AW_2
    ''' <summary>
    ''' Die Bauliste aus Commander Wars Dual Strike
    ''' </summary>
    ''' <remarks></remarks>
    AW_DS
    ''' <summary>
    ''' Bauliste aus Commander Wars der wahre Feind
    ''' </summary>
    ''' <remarks></remarks>
    CoW
    ''' <summary>
    ''' Bauliste aus Commander Wars der wahre Feind
    ''' </summary>
    ''' <remarks></remarks>
    CoWEmpty
    ''' <summary>
    ''' Leere Bauliste
    ''' </summary>
    ''' <remarks></remarks>
    None
    ''' <summary>
    ''' Nur Bodentruppen
    ''' </summary>
    ''' <remarks></remarks>
    Groundforce
    ''' <summary>
    ''' Nur Lufttruppen
    ''' </summary>
    ''' <remarks></remarks>
    Airforce
    ''' <summary>
    ''' Nur Seetruppen 
    ''' </summary>
    ''' <remarks></remarks>
    Seaforce
    ''' <summary>
    ''' Die Truppen aus Advance Wars Dual Strike
    ''' </summary>
    ''' <remarks></remarks>
    AW_DC
    ''' <summary>
    ''' Die Commander Wars 2 BauListe
    ''' </summary>
    ''' <remarks></remarks>
    CoW_2
    ''' <summary>
    ''' Eine vom Spieler erstellte Bauliste
    ''' </summary>
    ''' <remarks></remarks>
    Ind_1
    ''' <summary>
    ''' Eine vom Spieler erstellte Bauliste
    ''' </summary>
    ''' <remarks></remarks>
    Ind_2
    ''' <summary>
    ''' Eine vom Spieler erstellte Bauliste
    ''' </summary>
    ''' <remarks></remarks>
    Ind_3
End Enum
''' <summary>
''' Stellt alle Funktionen zum Laden von Objekten zur Verfuegung
''' </summary>
''' <remarks></remarks>
Public Class ObjektLadeklasse
    Const AnimationsWarteFrames As Integer = 2
#Region "Einheiten"
    'Hinweis bei einer neuen Einheit muessen auch die Texturen im ObjektSpieler geladen werden
    ''' <summary>
    ''' Laedt eine Einheit mit Startwerten
    ''' </summary>
    ''' <param name="Spieler"></param>
    ''' <param name="X"></param>
    ''' <param name="Y"></param>
    ''' <param name="EinheitenID"></param>
    ''' <param name="HatSichBewegt"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function NewEinheit(ByVal EinheitenID As String, ByVal Spieler As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal Leben As Integer, Optional ByVal HatSichBewegt As Boolean = True) As ObjektEinheit
        If DataSettings.CommanderWarsGameModus = CommanderWarsGameModi.FireEmblem Then
            Return Fire_Emblem_MOD.NewEinheit(EinheitenID, Spieler, X, Y, Leben, HatSichBewegt)
        Else
            Select Case EinheitenID.ToUpper
                Case "ABPZ"
                    Return New EinheitAmphibienpanzer(Leben, Spieler, X, Y, HatSichBewegt)
                Case "ART"
                    Return New EinheitArtillerie(Leben, Spieler, X, Y, HatSichBewegt)
                Case "AUFKLAERER"
                    Return New EinheitAufklaerer(Leben, Spieler, X, Y, HatSichBewegt)
                Case "BOMBER"
                    Return New EinheitBomber(Leben, Spieler, X, Y, HatSichBewegt)
                Case "FLAK"
                    Return New EinheitFlak(Leben, Spieler, X, Y, HatSichBewegt)
                Case "FLTR"
                    Return New EinheitFlugzeugtraeger(Leben, Spieler, X, Y, HatSichBewegt)
                Case MovementSorts.Hoellium.ToString.ToUpper
                    Return New EinheitHoellium(Leben, Spieler, X, Y, HatSichBewegt)
                Case "HOVERCRAFT"
                    Return New EinheitHovercraft(Leben, Spieler, X, Y, HatSichBewegt)
                Case "INF"
                    Return New EinheitInfanterie(Leben, Spieler, X, Y, HatSichBewegt)
                Case "JGPZ"
                    Return New EinheitJagdpanzer(Leben, Spieler, X, Y, HatSichBewegt)
                Case "JAEGER"
                    Return New EinheitJaeger(Leben, Spieler, X, Y, HatSichBewegt)
                Case "K-HELI"
                    Return New K_Heli(Leben, Spieler, X, Y, HatSichBewegt)
                Case "KPZ"
                    Return New EinheitKampfpanzer(Leben, Spieler, X, Y, HatSichBewegt)
                Case "KREUZER"
                    Return New EinheitKreuzer(Leben, Spieler, X, Y, HatSichBewegt)
                Case "L-BOOT"
                    Return New EinheitL_Boot(Leben, Spieler, X, Y, HatSichBewegt)
                Case "LAEUFER"
                    Return New EinheitLaeufer(Leben, Spieler, X, Y, HatSichBewegt)
                Case MovementSorts.Mech.ToString.ToUpper
                    Return New EinheitMech(Leben, Spieler, X, Y, HatSichBewegt)
                Case "MEGAPZ"
                    Return New EinheitMegapanzer(Leben, Spieler, X, Y, HatSichBewegt)
                Case "MISSILE"
                    Return New EinheitMissile(Leben, Spieler, X, Y, HatSichBewegt)
                Case "RKW"
                    Return New EinheitRaketenwerfer(Leben, Spieler, X, Y, HatSichBewegt)
                Case "SSIEINHEIT"
                    Return New EinheitScharfschuetze(Leben, Spieler, X, Y, HatSichBewegt)
                Case "SCHLFF"
                    Return New EinheitSchlachtschiff(Leben, Spieler, X, Y, HatSichBewegt)
                Case "S-BOMBE"
                    Return New Schwarze_Bombe(Leben, Spieler, X, Y, HatSichBewegt)
                Case "S-BOOT"
                    Return New Schwarze_Boot(Leben, Spieler, X, Y, HatSichBewegt)
                Case "SPAEHER"
                    Return New EinheitSpaeher(Leben, Spieler, X, Y, HatSichBewegt)
                Case "TARNK"
                    Return New EinheitTarnkappenbomber(Leben, Spieler, X, Y, HatSichBewegt)
                Case "TITANPZ"
                    Return New EinheitTitanpanzer(Leben, Spieler, X, Y, HatSichBewegt)
                Case "T-FLUGZEUG"
                    Return New EinheitTransportflugzeug(Leben, Spieler, X, Y, HatSichBewegt)
                Case "T-HELI"
                    Return New EinheitTransporthelikopter(Leben, Spieler, X, Y, HatSichBewegt)
                Case "TTL"
                    Return New EinheitTTL(Leben, Spieler, X, Y, HatSichBewegt)
                Case "TTP"
                    Return New EinheitTTP(Leben, Spieler, X, Y, HatSichBewegt)
                Case "U-BOOT"
                    Return New U_Boot(Leben, Spieler, X, Y, HatSichBewegt)
                Case "ZEPPELIN"
                    Return New EinheitZeppelin(Leben, Spieler, X, Y, HatSichBewegt)
                Case "ZERSTOERER"
                    Return New EinheitZerstoerer(Leben, Spieler, X, Y, HatSichBewegt)
                Case "VERSORGUNGSSCHIFF"
                    Return New EinheitVersorgungsschiff(Leben, Spieler, X, Y, HatSichBewegt)
                Case "BAUPANZER"
                    Return New EinheitBaupanzer(Leben, Spieler, X, Y, HatSichBewegt)
                Case "HOVERFLAK"
                    Return New EinheitHoverflak(Leben, Spieler, X, Y, HatSichBewegt)
                Case "SCHWERESHOVERCRAFT"
                    Return New EinheitSchweres_Hovercraft(Leben, Spieler, X, Y, HatSichBewegt)
                Case "MOTORRAD"
                    Return New EinheitMotorrad(Leben, Spieler, X, Y, HatSichBewegt)
                Case "FLARE"
                    Return New EinheitFlare(Leben, Spieler, X, Y, HatSichBewegt)
                Case "PANZERABWEHRKANONE"
                    Return New EinheitPanzerAbwehrkanone(Leben, Spieler, X, Y, HatSichBewegt)
                Case "WASSERFLUGZEUG"
                    Return New EinheitWasserflugzeug(Leben, Spieler, X, Y, HatSichBewegt)
                Case "KANONENBOOT"
                    Return New EinheitKanonenboot(Leben, Spieler, X, Y, HatSichBewegt)
                Case Else
                    For I = 0 To Objektverwalter.AlleEinheiten.Length - 1
                        If Objektverwalter.AlleEinheiten(I).EinheitenID = EinheitenID Then
                            Dim E As New EinheitCustom(Leben, Spieler, X, Y, HatSichBewegt)
                            E.Datenladen(I)
                            Return E
                        End If
                    Next
                    Return New EinheitInfanterie(Leben, Spieler, X, Y, HatSichBewegt)
            End Select
        End If
    End Function
    ''' <summary>
    ''' Laedt eine Einheit mit festen Werte
    ''' </summary>
    ''' <param name="EinheitenID"></param>
    ''' <param name="neuKP"></param>
    ''' <param name="neuTreibstoff"></param>
    ''' <param name="neuMunition"></param>
    ''' <param name="neuSpieler"></param>
    ''' <param name="neuBesetzen"></param>
    ''' <param name="neuX"></param>
    ''' <param name="neuY"></param>
    ''' <param name="HatSichBewegt"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function NewEinheit(ByVal EinheitenID As String, ByVal neuKP As Integer, ByVal neuTreibstoff As Integer, ByVal neuMunition As Integer, ByVal neuSpieler As Integer, ByVal neuBesetzen As Boolean, ByVal neuX As Integer, ByVal neuY As Integer, ByVal Tarnung As Boolean, Optional ByVal HatSichBewegt As Boolean = True) As ObjektEinheit
        If DataSettings.CommanderWarsGameModus = CommanderWarsGameModi.FireEmblem Then
            Return Fire_Emblem_MOD.NewEinheit(EinheitenID, neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
        Else
            Select Case EinheitenID.ToUpper
                Case "ABPZ"
                    Return New EinheitAmphibienpanzer(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "ART"
                    Return New EinheitArtillerie(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "AUFKLAERER"
                    Return New EinheitAufklaerer(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "BOMBER"
                    Return New EinheitBomber(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "FLAK"
                    Return New EinheitFlak(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "FLTR"
                    Return New EinheitFlugzeugtraeger(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case MovementSorts.Hoellium.ToString.ToUpper
                    Return New EinheitHoellium(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "HOVERCRAFT"
                    Return New EinheitHovercraft(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "INF"
                    Return New EinheitInfanterie(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "JGPZ"
                    Return New EinheitJagdpanzer(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "JAEGER"
                    Return New EinheitJaeger(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "K-HELI"
                    Return New K_Heli(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "KPZ"
                    Return New EinheitKampfpanzer(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "KREUZER"
                    Return New EinheitKreuzer(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "L-BOOT"
                    Return New EinheitL_Boot(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "LAEUFER"
                    Return New EinheitLaeufer(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case MovementSorts.Mech.ToString.ToUpper
                    Return New EinheitMech(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "MEGAPZ"
                    Return New EinheitMegapanzer(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "MISSILE"
                    Return New EinheitMissile(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "RKW"
                    Return New EinheitRaketenwerfer(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "SSIEINHEIT"
                    Return New EinheitScharfschuetze(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "SCHLFF"
                    Return New EinheitSchlachtschiff(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "S-BOMBE"
                    Return New Schwarze_Bombe(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "S-BOOT"
                    Return New Schwarze_Boot(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "SPAEHER"
                    Return New EinheitSpaeher(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "TARNK"
                    Return New EinheitTarnkappenbomber(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "TITANPZ"
                    Return New EinheitTitanpanzer(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "T-FLUGZEUG"
                    Return New EinheitTransportflugzeug(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "T-HELI"
                    Return New EinheitTransporthelikopter(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "TTL"
                    Return New EinheitTTL(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "TTP"
                    Return New EinheitTTP(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "U-BOOT"
                    Return New U_Boot(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "ZEPPELIN"
                    Return New EinheitZeppelin(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "ZERSTOERER"
                    Return New EinheitZerstoerer(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "VERSORGUNGSSCHIFF"
                    Return New EinheitVersorgungsschiff(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "BAUPANZER"
                    Return New EinheitBaupanzer(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "HOVERFLAK"
                    Return New EinheitHoverflak(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "SCHWERESHOVERCRAFT"
                    Return New EinheitSchweres_Hovercraft(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "MOTORRAD"
                    Return New EinheitMotorrad(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "FLARE"
                    Return New EinheitFlare(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "PANZERABWEHRKANONE"
                    Return New EinheitPanzerAbwehrkanone(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "WASSERFLUGZEUG"
                    Return New EinheitWasserflugzeug(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case "KANONENBOOT"
                    Return New EinheitKanonenboot(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                Case Else
                    For I = 0 To Objektverwalter.AlleEinheiten.Length - 1
                        If Objektverwalter.AlleEinheiten(I).EinheitenID = EinheitenID Then
                            Dim E As New EinheitCustom(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
                            E.Datenladen(I)
                            Return E
                        End If
                    Next
                    Return New EinheitInfanterie(neuKP, neuTreibstoff, neuMunition, neuSpieler, neuBesetzen, neuX, neuY, Tarnung, HatSichBewegt)
            End Select
        End If
    End Function
    ''' <summary>
    ''' Laedt eine Einheit mit bestimmten Leben
    ''' </summary>
    ''' <param name="Spieler"></param>
    ''' <param name="X"></param>
    ''' <param name="Y"></param>
    ''' <param name="EinheitenID"></param>
    ''' <param name="HatSichBewegt"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function NewEinheit(ByVal EinheitenID As String, ByVal Spieler As Integer, ByVal X As Integer, ByVal Y As Integer, Optional ByVal HatSichBewegt As Boolean = True) As ObjektEinheit
        If DataSettings.CommanderWarsGameModus = CommanderWarsGameModi.FireEmblem Then
            Return Fire_Emblem_MOD.NewEinheit(EinheitenID, Spieler, X, Y, HatSichBewegt)
        Else
            Select Case EinheitenID.ToUpper
                Case "ABPZ"
                    Return New EinheitAmphibienpanzer(Spieler, X, Y, HatSichBewegt)
                Case "ART"
                    Return New EinheitArtillerie(Spieler, X, Y, HatSichBewegt)
                Case "AUFKLAERER"
                    Return New EinheitAufklaerer(Spieler, X, Y, HatSichBewegt)
                Case "BOMBER"
                    Return New EinheitBomber(Spieler, X, Y, HatSichBewegt)
                Case "FLAK"
                    Return New EinheitFlak(Spieler, X, Y, HatSichBewegt)
                Case "FLTR"
                    Return New EinheitFlugzeugtraeger(Spieler, X, Y, HatSichBewegt)
                Case "HOELLIUM"
                    Return New EinheitHoellium(Spieler, X, Y, HatSichBewegt)
                Case "HOVERCRAFT"
                    Return New EinheitHovercraft(Spieler, X, Y, HatSichBewegt)
                Case "INF"
                    Return New EinheitInfanterie(Spieler, X, Y, HatSichBewegt)
                Case "JGPZ"
                    Return New EinheitJagdpanzer(Spieler, X, Y, HatSichBewegt)
                Case "JAEGER"
                    Return New EinheitJaeger(Spieler, X, Y, HatSichBewegt)
                Case "K-HELI"
                    Return New K_Heli(Spieler, X, Y, HatSichBewegt)
                Case "KPZ"
                    Return New EinheitKampfpanzer(Spieler, X, Y, HatSichBewegt)
                Case "KREUZER"
                    Return New EinheitKreuzer(Spieler, X, Y, HatSichBewegt)
                Case "L-BOOT"
                    Return New EinheitL_Boot(Spieler, X, Y, HatSichBewegt)
                Case "LAEUFER"
                    Return New EinheitLaeufer(Spieler, X, Y, HatSichBewegt)
                Case MovementSorts.Mech.ToString.ToUpper
                    Return New EinheitMech(Spieler, X, Y, HatSichBewegt)
                Case "MEGAPZ"
                    Return New EinheitMegapanzer(Spieler, X, Y, HatSichBewegt)
                Case "MISSILE"
                    Return New EinheitMissile(Spieler, X, Y, HatSichBewegt)
                Case "RKW"
                    Return New EinheitRaketenwerfer(Spieler, X, Y, HatSichBewegt)
                Case "SSIEINHEIT"
                    Return New EinheitScharfschuetze(Spieler, X, Y, HatSichBewegt)
                Case "SCHLFF"
                    Return New EinheitSchlachtschiff(Spieler, X, Y, HatSichBewegt)
                Case "S-BOMBE"
                    Return New Schwarze_Bombe(Spieler, X, Y, HatSichBewegt)
                Case "S-BOOT"
                    Return New Schwarze_Boot(Spieler, X, Y, HatSichBewegt)
                Case "SPAEHER"
                    Return New EinheitSpaeher(Spieler, X, Y, HatSichBewegt)
                Case "TARNK"
                    Return New EinheitTarnkappenbomber(Spieler, X, Y, HatSichBewegt)
                Case "TITANPZ"
                    Return New EinheitTitanpanzer(Spieler, X, Y, HatSichBewegt)
                Case "T-FLUGZEUG"
                    Return New EinheitTransportflugzeug(Spieler, X, Y, HatSichBewegt)
                Case "T-HELI"
                    Return New EinheitTransporthelikopter(Spieler, X, Y, HatSichBewegt)
                Case "TTL"
                    Return New EinheitTTL(Spieler, X, Y, HatSichBewegt)
                Case "TTP"
                    Return New EinheitTTP(Spieler, X, Y, HatSichBewegt)
                Case "U-BOOT"
                    Return New U_Boot(Spieler, X, Y, HatSichBewegt)
                Case "ZEPPELIN"
                    Return New EinheitZeppelin(Spieler, X, Y, HatSichBewegt)
                Case "ZERSTOERER"
                    Return New EinheitZerstoerer(Spieler, X, Y, HatSichBewegt)
                Case "VERSORGUNGSSCHIFF"
                    Return New EinheitVersorgungsschiff(Spieler, X, Y, HatSichBewegt)
                Case "BAUPANZER"
                    Return New EinheitBaupanzer(Spieler, X, Y, HatSichBewegt)
                Case "HOVERFLAK"
                    Return New EinheitHoverflak(Spieler, X, Y, HatSichBewegt)
                Case "SCHWERESHOVERCRAFT"
                    Return New EinheitSchweres_Hovercraft(Spieler, X, Y, HatSichBewegt)
                Case "MOTORRAD"
                    Return New EinheitMotorrad(Spieler, X, Y, HatSichBewegt)
                Case "FLARE"
                    Return New EinheitFlare(Spieler, X, Y, HatSichBewegt)
                Case "PANZERABWEHRKANONE"
                    Return New EinheitPanzerAbwehrkanone(Spieler, X, Y, HatSichBewegt)
                Case "WASSERFLUGZEUG"
                    Return New EinheitWasserflugzeug(Spieler, X, Y, HatSichBewegt)
                Case "KANONENBOOT"
                    Return New EinheitKanonenboot(Spieler, X, Y, HatSichBewegt)
                Case Else
                    For I = 0 To Objektverwalter.AlleEinheiten.Length - 1
                        If Objektverwalter.AlleEinheiten(I).EinheitenID = EinheitenID Then
                            Dim E As New EinheitCustom(Spieler, X, Y, HatSichBewegt)
                            E.Datenladen(I)
                            Return E
                        End If
                    Next
                    Return New EinheitInfanterie(Spieler, X, Y, HatSichBewegt)
            End Select
        End If
    End Function
    Public Shared Sub AlleEinheitenLaden()
        For Each E In Objektverwalter.AlleEinheiten
            E.Reset()
        Next
        Array.Resize(Objektverwalter.AlleEinheiten, 43)
        Dim Spieler As Integer = -1
        Dim X As Integer = -1
        Dim Y As Integer = -1
        Objektverwalter.AlleEinheiten(0) = New Objektverwalter.EinheitenTextur("ART")
        Objektverwalter.AlleEinheiten(1) = New Objektverwalter.EinheitenTextur("AUFKLAERER")
        Objektverwalter.AlleEinheiten(2) = New Objektverwalter.EinheitenTextur("BOMBER")
        Objektverwalter.AlleEinheiten(3) = New Objektverwalter.EinheitenTextur("FLAK")
        Objektverwalter.AlleEinheiten(4) = New Objektverwalter.EinheitenTextur("FLTR")
        Objektverwalter.AlleEinheiten(5) = New Objektverwalter.EinheitenTextur("HOELLIUM")
        Objektverwalter.AlleEinheiten(6) = New Objektverwalter.EinheitenTextur("HOVERCRAFT")
        Objektverwalter.AlleEinheiten(7) = New Objektverwalter.EinheitenTextur("INF")
        Objektverwalter.AlleEinheiten(8) = New Objektverwalter.EinheitenTextur("JGPZ")
        Objektverwalter.AlleEinheiten(9) = New Objektverwalter.EinheitenTextur("JAEGER")
        Objektverwalter.AlleEinheiten(10) = New Objektverwalter.EinheitenTextur("K-HELI")
        Objektverwalter.AlleEinheiten(11) = New Objektverwalter.EinheitenTextur("KPZ")
        Objektverwalter.AlleEinheiten(12) = New Objektverwalter.EinheitenTextur("KREUZER")
        Objektverwalter.AlleEinheiten(13) = New Objektverwalter.EinheitenTextur("L-BOOT")
        Objektverwalter.AlleEinheiten(14) = New Objektverwalter.EinheitenTextur("LAEUFER")
        Objektverwalter.AlleEinheiten(15) = New Objektverwalter.EinheitenTextur("MECH")
        Objektverwalter.AlleEinheiten(16) = New Objektverwalter.EinheitenTextur("MEGAPZ")
        Objektverwalter.AlleEinheiten(17) = New Objektverwalter.EinheitenTextur("MISSILE")
        Objektverwalter.AlleEinheiten(18) = New Objektverwalter.EinheitenTextur("RKW")
        Objektverwalter.AlleEinheiten(19) = New Objektverwalter.EinheitenTextur("SSIEINHEIT")
        Objektverwalter.AlleEinheiten(20) = New Objektverwalter.EinheitenTextur("SCHLFF")
        Objektverwalter.AlleEinheiten(21) = New Objektverwalter.EinheitenTextur("S-BOMBE")
        Objektverwalter.AlleEinheiten(22) = New Objektverwalter.EinheitenTextur("S-BOOT")
        Objektverwalter.AlleEinheiten(23) = New Objektverwalter.EinheitenTextur("SPAEHER")
        Objektverwalter.AlleEinheiten(24) = New Objektverwalter.EinheitenTextur("TARNK")
        Objektverwalter.AlleEinheiten(25) = New Objektverwalter.EinheitenTextur("TITANPZ")
        Objektverwalter.AlleEinheiten(26) = New Objektverwalter.EinheitenTextur("T-FLUGZEUG")
        Objektverwalter.AlleEinheiten(27) = New Objektverwalter.EinheitenTextur("T-HELI")
        Objektverwalter.AlleEinheiten(28) = New Objektverwalter.EinheitenTextur("TTL")
        Objektverwalter.AlleEinheiten(29) = New Objektverwalter.EinheitenTextur("TTP")
        Objektverwalter.AlleEinheiten(30) = New Objektverwalter.EinheitenTextur("U-BOOT")
        Objektverwalter.AlleEinheiten(31) = New Objektverwalter.EinheitenTextur("ZEPPELIN")
        Objektverwalter.AlleEinheiten(32) = New Objektverwalter.EinheitenTextur("ZERSTOERER")
        Objektverwalter.AlleEinheiten(33) = New Objektverwalter.EinheitenTextur("ABPZ")
        Objektverwalter.AlleEinheiten(34) = New Objektverwalter.EinheitenTextur("BAUPANZER")
        Objektverwalter.AlleEinheiten(35) = New Objektverwalter.EinheitenTextur("VERSORGUNGSSCHIFF")
        Objektverwalter.AlleEinheiten(36) = New Objektverwalter.EinheitenTextur("HOVERFLAK")
        Objektverwalter.AlleEinheiten(37) = New Objektverwalter.EinheitenTextur("SCHWERESHOVERCRAFT")
        Objektverwalter.AlleEinheiten(38) = New Objektverwalter.EinheitenTextur("FLARE")
        Objektverwalter.AlleEinheiten(39) = New Objektverwalter.EinheitenTextur("MOTORRAD")
        Objektverwalter.AlleEinheiten(40) = New Objektverwalter.EinheitenTextur("WASSERFLUGZEUG")
        Objektverwalter.AlleEinheiten(41) = New Objektverwalter.EinheitenTextur("PANZERABWEHRKANONE")
        Objektverwalter.AlleEinheiten(42) = New Objektverwalter.EinheitenTextur("KANONENBOOT")


        'Die selbst erstellten Einheiten laden.
        If Hauptmenue.Connection.Connected And Not Hauptmenue.Connection.Hosten Then
            If My.Computer.FileSystem.DirectoryExists(DataSettings.Resourcenpfad + "!Custom\Multiplayer\Unit\") Then
                For Each Einheit In My.Computer.FileSystem.GetFiles(DataSettings.Resourcenpfad + "!Custom\Multiplayer\Unit\", FileIO.SearchOption.SearchTopLevelOnly, "*.ent")
                    Array.Resize(Objektverwalter.AlleEinheiten, Objektverwalter.AlleEinheiten.Length + 1)
                    Dim C As New EinheitCustom(Spieler, X, Y)
                    C.Datenladen(Einheit)
                    Objektverwalter.AlleEinheiten(Objektverwalter.AlleEinheiten.Length - 1) = New Objektverwalter.EinheitenTextur(C)
                Next
            End If
        ElseIf My.Computer.FileSystem.DirectoryExists(DataSettings.Resourcenpfad + "!Custom\Unit\") Then
            For Each Einheit In My.Computer.FileSystem.GetFiles(DataSettings.Resourcenpfad + "!Custom\Unit\", FileIO.SearchOption.SearchTopLevelOnly, "*.ent")
                Array.Resize(Objektverwalter.AlleEinheiten, Objektverwalter.AlleEinheiten.Length + 1)
                Dim C As New EinheitCustom(Spieler, X, Y)
                C.Datenladen(Einheit)
                Objektverwalter.AlleEinheiten(Objektverwalter.AlleEinheiten.Length - 1) = New Objektverwalter.EinheitenTextur(C)
            Next
        End If

        For I = 0 To Objektverwalter.AlleEinheiten.Length - 1
            If Objektverwalter.AlleEinheiten(I).EinheitenID = "INF" Then
                ObjektEinheit.INFID = I
                Exit For
            End If
        Next
        Dim S() As ObjektSpieler = New ObjektSpieler() {New ObjektSpieler(0, Color.AliceBlue, 0, Nothing, 0, Armeen.OS.ToString, "A", Nothing, ObjektSpieler.KIStufen.Geschlossen, 0)}
        Objektverwalter.ArmeeTexturenLaden(S)

    End Sub

    ''' <summary>
    ''' Laedt alle Bewegungsarten
    ''' </summary>
    ''' <remarks></remarks>
    Public Shared Sub BewegungstabellenLaden()
        'Amphibien
        Tabellenverwalter.AddTabelle("Amphibie+Regen", New BewegungstabelleAmphibie_Regen)
        Tabellenverwalter.AddTabelle("Amphibie+Sandsturm", New BewegungstabelleAmphibie_Sandsturm)
        Tabellenverwalter.AddTabelle("Amphibie+Schnee", New BewegungstabelleAmphibie_Schnee)
        Tabellenverwalter.AddTabelle("Amphibie+Sonne", New BewegungstabelleAmphibie_Sonne)
        'Flugzeug
        Tabellenverwalter.AddTabelle("Flugzeug+Regen", New BewegungstabelleFlugzeug_Regen)
        Tabellenverwalter.AddTabelle("Flugzeug+Sandsturm", New BewegungstabelleFlugzeug_Sandsturm)
        Tabellenverwalter.AddTabelle("Flugzeug+Schnee", New BewegungstabelleFlugzeug_Schnee)
        Tabellenverwalter.AddTabelle("Flugzeug+Sonne", New BewegungstabelleFlugzeug_Sonne)
        'Fuss
        Tabellenverwalter.AddTabelle("Fuss+Regen", New BewegungstabelleFuss_Regen)
        Tabellenverwalter.AddTabelle("Fuss+Sandsturm", New BewegungstabelleFuss_Sandsturm)
        Tabellenverwalter.AddTabelle("Fuss+Schnee", New BewegungstabelleFuss_Schnee)
        Tabellenverwalter.AddTabelle("Fuss+Sonne", New BewegungstabelleFuss_Sonne)
        'Helikopter
        Tabellenverwalter.AddTabelle("Helikopter+Regen", New BewegungstabelleHelikopter_Regen)
        Tabellenverwalter.AddTabelle("Helikopter+Sandsturm", New BewegungstabelleHelikopter_Sandsturm)
        Tabellenverwalter.AddTabelle("Helikopter+Schnee", New BewegungstabelleHelikopter_Schnee)
        Tabellenverwalter.AddTabelle("Helikopter+Sonne", New BewegungstabelleHelikopter_Sonne)
        'Hoellium
        Tabellenverwalter.AddTabelle("Hoellium+Regen", New BewegungstabelleHoellium_Regen)
        Tabellenverwalter.AddTabelle("Hoellium+Sandsturm", New BewegungstabelleHoellium_Sandsturm)
        Tabellenverwalter.AddTabelle("Hoellium+Schnee", New BewegungstabelleHoellium_Schnee)
        Tabellenverwalter.AddTabelle("Hoellium+Sonne", New BewegungstabelleHoellium_Sonne)
        'Ketten
        Tabellenverwalter.AddTabelle("Ketten+Regen", New BewegungstabelleKetten_Regen)
        Tabellenverwalter.AddTabelle("Ketten+Sandsturm", New BewegungstabelleKetten_Sandsturm)
        Tabellenverwalter.AddTabelle("Ketten+Schnee", New BewegungstabelleKetten_Schnee)
        Tabellenverwalter.AddTabelle("Ketten+Sonne", New BewegungstabelleKetten_Sonne)
        'Laeufer
        Tabellenverwalter.AddTabelle("Laeufer+Regen", New BewegungstabelleLaeufer_Regen)
        Tabellenverwalter.AddTabelle("Laeufer+Sandsturm", New BewegungstabelleLaeufer_Sandsturm)
        Tabellenverwalter.AddTabelle("Laeufer+Schnee", New BewegungstabelleLaeufer_Schnee)
        Tabellenverwalter.AddTabelle("Laeufer+Sonne", New BewegungstabelleLaeufer_Sonne)
        'Mech
        Tabellenverwalter.AddTabelle("Mech+Regen", New BewegungstabelleMech_Regen)
        Tabellenverwalter.AddTabelle("Mech+Sandsturm", New BewegungstabelleMech_Sandsturm)
        Tabellenverwalter.AddTabelle("Mech+Schnee", New BewegungstabelleMech_Schnee)
        Tabellenverwalter.AddTabelle("Mech+Sonne", New BewegungstabelleMech_Sonne)
        'Reifen
        Tabellenverwalter.AddTabelle("Reifen+Regen", New BewegungstabelleReifen_Regen)
        Tabellenverwalter.AddTabelle("Reifen+Sandsturm", New BewegungstabelleReifen_Sandsturm)
        Tabellenverwalter.AddTabelle("Reifen+Schnee", New BewegungstabelleReifen_Schnee)
        Tabellenverwalter.AddTabelle("Reifen+Sonne", New BewegungstabelleReifen_Sonne)
        'Schiff
        Tabellenverwalter.AddTabelle("Schiff+Regen", New BewegungstabelleSchiff_Regen)
        Tabellenverwalter.AddTabelle("Schiff+Sandsturm", New BewegungstabelleSchiff_Sandsturm)
        Tabellenverwalter.AddTabelle("Schiff+Schnee", New BewegungstabelleSchiff_Schnee)
        Tabellenverwalter.AddTabelle("Schiff+Sonne", New BewegungstabelleSchiff_Sonne)
        'Transport
        Tabellenverwalter.AddTabelle("Transport+Regen", New BewegungstabelleTransport_Regen)
        Tabellenverwalter.AddTabelle("Transport+Sandsturm", New BewegungstabelleTransport_Sandsturm)
        Tabellenverwalter.AddTabelle("Transport+Schnee", New BewegungstabelleTransport_Schnee)
        Tabellenverwalter.AddTabelle("Transport+Sonne", New BewegungstabelleTransport_Sonne)
        'Motorreifen
        Tabellenverwalter.AddTabelle("Motorreifen+Regen", New BewegungstabelleMotorreifen_Regen)
        Tabellenverwalter.AddTabelle("Motorreifen+Sandsturm", New BewegungstabelleMotorreifen_Sandsturm)
        Tabellenverwalter.AddTabelle("Motorreifen+Schnee", New BewegungstabelleMotorreifen_Schnee)
        Tabellenverwalter.AddTabelle("Motorreifen+Sonne", New BewegungstabelleMotorreifen_Sonne)
        'Wuestenketten
        Tabellenverwalter.AddTabelle("Wuestenketten+Regen", New BewegungstabelleWuestenketten_Sonne)
        Tabellenverwalter.AddTabelle("Wuestenketten+Sandsturm", New BewegungstabelleWuestenketten_Sonne)
        Tabellenverwalter.AddTabelle("Wuestenketten+Schnee", New BewegungstabelleWuestenketten_Sonne)
        Tabellenverwalter.AddTabelle("Wuestenketten+Sonne", New BewegungstabelleWuestenketten_Sonne)
        'Schneeketten
        Tabellenverwalter.AddTabelle("Schneeketten+Regen", New BewegungstabelleSchneeketten_Sonne)
        Tabellenverwalter.AddTabelle("Schneeketten+Sandsturm", New BewegungstabelleSchneeketten_Sonne)
        Tabellenverwalter.AddTabelle("Schneeketten+Schnee", New BewegungstabelleSchneeketten_Sonne)
        Tabellenverwalter.AddTabelle("Schneeketten+Sonne", New BewegungstabelleSchneeketten_Sonne)
        'Alle Custom Tabellen laden.
        If My.Computer.FileSystem.DirectoryExists(DataSettings.Resourcenpfad + "!Custom\Movement\") Then
            For Each BewTabelle In My.Computer.FileSystem.GetFiles(DataSettings.Resourcenpfad + "!Custom\Movement\", FileIO.SearchOption.SearchTopLevelOnly, "*.bew")
                EinheitCustom.CreateCustumTabellen(BewTabelle)
            Next
        End If
    End Sub
    ''' <summary>
    ''' Laedt alle Angriffsarten
    ''' </summary>
    ''' <remarks></remarks>
    Public Shared Sub AngriffsartenLaden()
        Tabellenverwalter.AddTabelle("AufklaererMG", New AngriffstabelleAufklaererMG)
        Tabellenverwalter.AddTabelle("Bazooka", New AngriffstabelleBazooka)
        Tabellenverwalter.AddTabelle("Boden-Luft-Raketen", New AngriffstabelleBoden_Luft_Raketen)
        Tabellenverwalter.AddTabelle("Bomben", New AngriffstabelleBomben)
        Tabellenverwalter.AddTabelle("Flak-Gewehr", New AngriffstabelleFlak_Gewehr)
        Tabellenverwalter.AddTabelle("H-Bomben", New AngriffstabelleH_Bomben)
        Tabellenverwalter.AddTabelle("InfanterieMG", New AngriffstabelleInfanterieMG)
        Tabellenverwalter.AddTabelle("JagdpanzerHaubitze", New AngriffstabelleJagdpanzerHaubitze)
        Tabellenverwalter.AddTabelle("JagdpanzerMG", New AngriffstabelleJagdpanzerMG)
        Tabellenverwalter.AddTabelle("K-HeliMG", New AngriffstabelleK_HeliMG)
        Tabellenverwalter.AddTabelle("KampfpanzerHaubitze", New AngriffstabelleKampfpanzerHaubitze)
        Tabellenverwalter.AddTabelle("KampfpanzerMG", New AngriffstabelleKampfpanzerMG)
        Tabellenverwalter.AddTabelle("Kanone", New AngriffstabelleKanone)
        Tabellenverwalter.AddTabelle("Laeuferhaubitze", New AngriffstabelleLaeuferhaubitze)
        Tabellenverwalter.AddTabelle("Luft-Boden-Raketen", New AngriffstabelleLuft_Boden_Raketen)
        Tabellenverwalter.AddTabelle("Luftraketen", New AngriffstabelleLuftraketen)
        Tabellenverwalter.AddTabelle("MechMG", New AngriffstabelleMechMG)
        Tabellenverwalter.AddTabelle("Megahaubitze", New AngriffstabelleMegahaubitze)
        Tabellenverwalter.AddTabelle("Megakanone", New AngriffstabelleMegakanone)
        Tabellenverwalter.AddTabelle("MegapanzerMG", New AngriffstabelleMegapanzerMG)
        Tabellenverwalter.AddTabelle("Omni-Missile", New AngriffstabelleOmni_Missile)
        Tabellenverwalter.AddTabelle("Panzerfaust", New AngriffstabellePanzerfaust)
        Tabellenverwalter.AddTabelle("Raketen", New AngriffstabelleRaketen)
        Tabellenverwalter.AddTabelle("Scharfschuetzengewehr", New AngriffstabelleScharfschuetzengewehr)
        Tabellenverwalter.AddTabelle("See-Luft-Raketen", New AngriffstabelleSee_Luft_Raketen)
        Tabellenverwalter.AddTabelle("See-Raketen", New AngriffstabelleSee_Raketen)
        Tabellenverwalter.AddTabelle("SpaeherMG", New AngriffstabelleSpaeherMG)
        Tabellenverwalter.AddTabelle("Titanhaubitze", New AngriffstabelleTitanhaubitze)
        Tabellenverwalter.AddTabelle("TitanpanzerMG", New AngriffstabelleTitanpanzerMG)
        Tabellenverwalter.AddTabelle("Torpedo", New AngriffstabelleTorpedo)
        Tabellenverwalter.AddTabelle("V3-Rakete", New AngriffstabelleV3_Rakete)
        Tabellenverwalter.AddTabelle("Vulkan-Waffe", New AngriffstabelleVulkan_Waffe)
        Tabellenverwalter.AddTabelle("Zwillingshaubitze", New AngriffstabelleZwillingshaubitze)
        Tabellenverwalter.AddTabelle("Cruise Missile", New AngriffstabelleCruiseMissile)
        Tabellenverwalter.AddTabelle("PanzerKanone", New AngriffstabellePanzerKanone)
        Tabellenverwalter.AddTabelle("FlareMG", New AngriffstabelleFlareMG)
        Tabellenverwalter.AddTabelle("Abstandswaffe", New AngriffstabelleAbstandswaffe)
        Tabellenverwalter.AddTabelle("WasserRakete", New AngriffstabelleWasserRakete)
        'Commander Wars 2 Spezial Tabellen!
        Tabellenverwalter.AddTabelle("MotorradMG", New AngriffstabelleMotorradMG)
        Tabellenverwalter.AddTabelle("ScharfschuetzenMG", New AngriffstabelleScharfschuetzenMG)
        Tabellenverwalter.AddTabelle("ZerstoererFlak", New AngriffstabelleZerstoererFlak)

        Tabellenverwalter.AddTabelle("TTPMG", New AngriffstabelleTTPMG)
        'Custom Weapons Laden
        If My.Computer.FileSystem.DirectoryExists(DataSettings.Resourcenpfad + "!Custom\Weapon\") Then
            For Each BewTabelle In My.Computer.FileSystem.GetFiles(DataSettings.Resourcenpfad + "!Custom\Weapon\", FileIO.SearchOption.SearchTopLevelOnly, "*.waf")
                EinheitCustom.CreateCustumTabellen(BewTabelle)
            Next
        End If

    End Sub

    ''' <summary>
    ''' Wandelt einen Einheitennamen in eine EinheitenID um.
    ''' </summary>
    ''' <param name="Einheitenname"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetIDFromName(ByVal Einheitenname As String) As String
        For Each E In Objektverwalter.AlleEinheiten
            If E.Einheit.Einheitenname.ToUpper = Einheitenname.ToUpper Then
                Return E.EinheitenID
            End If
        Next
        Return Einheitenname
    End Function
    ''' <summary>
    ''' Wandelt eine EinheitenID in einen Einheitennamen um.
    ''' </summary>
    ''' <param name="EinheitenID"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetNamefromID(ByVal EinheitenID As String) As String
        For Each E In Objektverwalter.AlleEinheiten
            If E.EinheitenID.ToUpper = EinheitenID.ToUpper Then
                Return E.Einheit.Einheitenname
            End If
        Next
        Return EinheitenID
    End Function
    ''' <summary>
    ''' Gibt die Standard Kosten einer Einheit zurueck
    ''' </summary>
    ''' <param name="EinheitenID"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetEinheitenkosten(ByVal EinheitenID As String) As Integer
        For I = 0 To Objektverwalter.AlleEinheiten.Length - 1
            If EinheitenID = Objektverwalter.AlleEinheiten(I).EinheitenID Then
                Return Objektverwalter.AlleEinheiten(I).Einheit.Kosten
            End If
        Next
        Return 99999
    End Function
    ''' <summary>
    ''' Gibt eine Tabelle zurueck mit Einheiten die weiter laufen koennen
    ''' </summary>
    ''' <param name="Bewegungsboni"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function NewBewegungsboni(ByVal Bewegungsboni As String) As BewegungsboniTabelle
        Select Case Bewegungsboni.ToUpper
            Case "ALLES+1"
                Return New BewegungsboniTabelleAlles_1
            Case "ALLES+2"
                Return New BewegungsboniTabelleAlles_2
            Case "ALLES+3"
                Return New BewegungsboniTabelleAlles_3
            Case "FERN+PANZER+1"
                Return New BewegungsboniTabelleFern_Panzer_1
            Case "FERN+PANZER+2"
                Return New BewegungsboniTabelleFern_Panzer_2
            Case "INF+1"
                Return New BewegungsboniTabelleINF_1
            Case "INF+2"
                Return New BewegungsboniTabelleINF_2
            Case "NAHKAMPF+1"
                Return New BewegungsboniTabelleNahkampf_1
            Case "PANZER+1"
                Return New BewegungsboniTabellePanzer_1
            Case "TRANSPORTER+1"
                Return New BewegungsboniTabelleTransporter_1
            Case "HOVERCRAFT+1"
                Return New BewegungsboniTabelleHovercraft_1
            Case Else
                Return Nothing
        End Select
    End Function
    ''' <summary>
    ''' Laedt eine neue Feuerkraftstabelle
    ''' </summary>
    ''' <param name="Name"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function NewFeuerkrafttabelle(ByVal Name As String) As Angriffstabelle
        Select Case Name.ToUpper
            Case "110"
                Return New Feuerkrafttabelle110
            Case "115"
                Return New Feuerkrafttabelle115
            Case "120"
                Return New Feuerkrafttabelle120
            Case "130"
                Return New Feuerkrafttabelle130
            Case "135"
                Return New Feuerkrafttabelle135
            Case "140"
                Return New Feuerkrafttabelle140
            Case "160"
                Return New Feuerkrafttabelle160
            Case "80"
                Return New Feuerkrafttabelle80
            Case "90"
                Return New Feuerkrafttabelle90
            Case "FERNKAMPF120"
                Return New FeuerkrafttabelleFernkampf120
            Case "FERNKAMPF140"
                Return New FeuerkrafttabelleFernkampf140
            Case "FERNKAMPF160"
                Return New FeuerkrafttabelleFernkampf160
            Case "HELIS150"
                Return New FeuerkrafttabelleHelis150
            Case "HELIS160"
                Return New FeuerkrafttabelleHelis160
            Case "HELIS190"
                Return New FeuerkrafttabelleHelis190
            Case "INF120"
                Return New FeuerkrafttabelleINF120
            Case "INF140"
                Return New FeuerkrafttabelleINF140
            Case "160"
                Return New FeuerkrafttabelleINF160
            Case "JESSPANZER120"
                Return New FeuerkrafttabelleJessPanzer120
            Case "LUFT115"
                Return New FeuerkrafttabelleLuft115
            Case "LUFT11505"
                Return New FeuerkrafttabelleLuft11505
            Case "LUFT135"
                Return New FeuerkrafttabelleLuft135
            Case "PANZER110"
                Return New FeuerkrafttabellePanzer110
            Case "PANZER120"
                Return New FeuerkrafttabellePanzer120
            Case "PANZER130"
                Return New FeuerkrafttabellePanzer130
            Case "PANZER160"
                Return New FeuerkrafttabellePanzer160
            Case "PANZER180"
                Return New FeuerkrafttabellePanzer180
            Case "SEE115"
                Return New FeuerkrafttabelleSee115
            Case "SEE125"
                Return New FeuerkrafttabelleSee125
            Case "SEE130"
                Return New FeuerkrafttabelleSee130
            Case "HOVERCRAFT120"
                Return New FeuerkrafttabelleHovercrafts120
            Case Else
                Return Nothing
        End Select
    End Function

    Public Shared Sub ImportAWDorStandUnit(ByVal ImagePfad As String, ByVal SpeicherPfad As String)
        Dim Bild As Bitmap = Image.FromFile(ImagePfad)
        Dim EinheitenZahl As Integer = Math.DivRem(Bild.Height, 24, 0)
        For I = 0 To EinheitenZahl - 1
            Dim Standbild As New Bitmap(64, 16)
            For I2 = 0 To 2
                For X = 0 To 15
                    For Y = 0 To 15
                        If I2 = 0 Then
                            Standbild.SetPixel(X + 16 * 3, Y, Bild.GetPixel(48 + X, 24 * I + 8 + Y))
                        End If
                        Standbild.SetPixel(X + 16 * I2, Y, Bild.GetPixel(48 + X + 16 * I2, 24 * I + 8 + Y))
                    Next
                Next
            Next
            Standbild.Save(SpeicherPfad + "Unit" + I.ToString + ".png")
        Next
    End Sub
    Public Shared Sub TranslateIDInNameAndSave(ByVal Datei As String)
        Using W As New IO.StreamWriter(Datei)
            For Each E In Objektverwalter.AlleEinheiten
                W.WriteLine(E.EinheitenID + "=" + Sprachconverter.Translate(E.Einheit.Einheitenname))
            Next
        End Using
    End Sub
#End Region
#Region "KO's"
    ''' <summary>
    ''' Laedt alle KO's mit ihren Texturen
    ''' </summary>
    ''' <param name="KOS"></param>
    ''' <remarks></remarks>
    Public Shared Sub KOLaden(ByRef KOS() As Objektverwalter.KO, Optional ByVal TextNichtSplitten As Boolean = False)
        Array.Resize(KOS, 78)
        Dim KOBilderIDs() As String = DataSettings.KOTexturen.Split("|")

        KOS(0) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ADDER"), "ADDER", Armeen.BH.ToString, New KOBeschreibungAdder)
        KOS(1) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ALEXANDER"), "ALEXANDER", Armeen.BM.ToString, New KOBeschreibungAlexander)
        KOS(2) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ANDY"), "ANDY", Armeen.OS.ToString, New KOBeschreibungAndy)
        KOS(3) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "CANDY"), "CANDY", Armeen.BG.ToString, New KOBeschreibungCandy)
        KOS(4) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "COLIN"), "COLIN", Armeen.BM.ToString, New KOBeschreibungColin)
        KOS(5) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "CONRAD"), "CONRAD", Armeen.GE.ToString, New KOBeschreibungConrad)
        KOS(6) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "DRAKE"), "DRAKE", Armeen.GE.ToString, New KOBeschreibungDrake)
        KOS(7) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "EAGLE"), "EAGLE", Armeen.GE.ToString, New KOBeschreibungEagle)
        KOS(8) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "EPOCH"), "EPOCH", Armeen.ML.ToString, New KOBeschreibungEpoch)
        KOS(9) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "GRIMM"), "GRIMM", Armeen.YC.ToString, New KOBeschreibungGrimm)
        KOS(10) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "HACHI"), "HACHI", Armeen.OS.ToString, New KOBeschreibungHachi)
        KOS(11) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "HELMUT"), "HELMUT", Armeen.BH.ToString, New KOBeschreibungHelmut)
        KOS(12) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "JAKE"), "JAKE", Armeen.OS.ToString, New KOBeschreibungJake)
        KOS(13) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "JAVIER"), "JAVIER", Armeen.GE.ToString, New KOBeschreibungJavier)
        KOS(14) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "JESS"), "JESS", Armeen.GE.ToString, New KOBeschreibungJess)
        KOS(15) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "JUGGER"), "JUGGER", Armeen.BG.ToString, New KOBeschreibungJugger)
        KOS(16) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "KANBEI"), "KANBEI", Armeen.YC.ToString, New KOBeschreibungKanbei)
        KOS(17) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "KAT"), "KAT", Armeen.BH.ToString, New KOBeschreibungKat)
        KOS(18) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "KID"), "KID", Armeen.BM.ToString, New KOBeschreibungKid)
        KOS(19) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "MAVERIK"), "MAVERIK", Armeen.BH.ToString, New KOBeschreibungMaverik)
        KOS(20) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "MAX"), "MAX", Armeen.OS.ToString, New KOBeschreibungMax)
        KOS(21) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "MELANTHE"), "MELANTHE", Armeen.BH.ToString, New KOBeschreibungMelanthe)
        KOS(22) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "NAPOLEON"), "NAPOLEON", Armeen.ML.ToString, New KOBeschreibungNapoleon)
        KOS(23) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "NELL"), "NELL", Armeen.OS.ToString, New KOBeschreibungNell)
        KOS(24) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "OLAF"), "OLAF", Armeen.BM.ToString, New KOBeschreibungOlaf)
        KOS(25) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "OZZY"), "OZZY", Armeen.AC.ToString, New KOBeschreibungOzzy)
        KOS(26) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "PETER"), "PETER", Armeen.GE.ToString, New KOBeschreibungPeter)
        KOS(27) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "RACHEL"), "RACHEL", Armeen.OS.ToString, New KOBeschreibungRachel)
        KOS(28) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "SABAKI"), "SABAKI", Armeen.AC.ToString, New KOBeschreibungSabaki)
        KOS(29) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "SASHA"), "SASHA", Armeen.BM.ToString, New KOBeschreibungSasha)
        KOS(30) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "SENSEI"), "SENSEI", Armeen.YC.ToString, New KOBeschreibungSensei)
        KOS(31) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "SMITAN"), "SMITAN", Armeen.GE.ToString, New KOBeschreibungSmitan)
        KOS(32) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "SONJA"), "SONJA", Armeen.YC.ToString, New KOBeschreibungSonja)
        KOS(33) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "SOPHIE"), "SOPHIE", Armeen.OS.ToString, New KOBeschreibungSophie)
        KOS(34) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "STURM"), "STURM", Armeen.BH.ToString, New KOBeschreibungSturm)
        KOS(35) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "VON BOLT"), "VON BOLT", Armeen.BG.ToString, New KOBeschreibungVon_Bolt)
        KOS(36) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ZAK"), "ZAK", Armeen.BG.ToString, New KOBeschreibungZak)
        KOS(37) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "TAMI"), "TAMI", Armeen.OS.ToString, New KOBeschreibungTami)
        KOS(38) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "RATTIGAN"), "RATTIGAN", Armeen.YC.ToString, New KOBeschreibungRattigan)
        KOS(39) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "TEMPEST"), "TEMPEST", Armeen.BT.ToString, New KOBeschreibungTempest)
        KOS(40) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "EMBER"), "EMBER", Armeen.BG.ToString, New KOBeschreibungEmber)
        KOS(41) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "CARMEN"), "CARMEN", Armeen.AC.ToString, New KOBeschreibungCarmen)
        KOS(42) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "SANJURO"), "SANJURO", Armeen.GS.ToString, New KOBeschreibungSanjuro)
        KOS(43) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "MINAMOTO"), "MINAMOTO", Armeen.GS.ToString, New KOBeschreibungMinamoto)
        KOS(44) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "GRAVES"), "GRAVES", Armeen.DM.ToString, New KOBeschreibungGraves)
        KOS(45) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ROBOANDY"), "ROBOANDY", Armeen.ML.ToString, New KOBeschreibungRobandy)
        KOS(46) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ADAM"), "ADAM", Armeen.TI.ToString, New KOBeschreibungAdam)
        KOS(47) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "AMY"), "AMY", Armeen.PF.ToString, New KOBeschreibungAmy)
        KOS(48) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "WALTER"), "WALTER", Armeen.GS.ToString, New KOBeschreibungWalter)
        KOS(49) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "VARLOT"), "VARLOT", Armeen.DM.ToString, New KOBeschreibungVarlot)
        KOS(50) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "MARY"), "MARY", Armeen.AC.ToString, New KOBeschreibungMary)
        KOS(51) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ERIC"), "ERIC", Armeen.DM.ToString, New KOBeschreibungEric)
        KOS(52) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "EDWARD"), "EDWARD", Armeen.TI.ToString, New KOBeschreibungEdward)
        KOS(53) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "KOSHI"), "KOSHI", Armeen.BT.ToString, New KOBeschreibungKoshi)
        KOS(54) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "JARED"), "JARED", Armeen.AC.ToString, New KOBeschreibungJared)
        KOS(55) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "LECHIFFRE"), "LECHIFFRE", Armeen.DM.ToString, New KOBeschreibungLeChiffre)
        KOS(56) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ZANDRA"), "ZANDRA", Armeen.BT.ToString, New KOBeschreibungZandra)
        KOS(57) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "LEVNWORTH"), "LEVENWORTH", Armeen.TI.ToString, New KOBeschreibungLevenworth)
        KOS(58) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ALEX"), "ALEX", Armeen.TI.ToString, New KOBeschreibungAlex)
        KOS(59) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ROBOSTURM"), "ROBOSTURM", Armeen.ML.ToString, New KOBeschreibungRobosturm)
        KOS(60) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ALEXIS"), "ALEXIS", Armeen.PF.ToString, New KOBeschreibungAlexis)
        KOS(61) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "JULIA"), "JULIA", Armeen.PF.ToString, New KOBeschreibungJulia)
        KOS(62) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ARTEMIS"), "ARTEMIS", Armeen.BT.ToString, New KOBeschreibungArtemis)
        KOS(63) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "WILL"), "WILL", Armeen.IB.ToString, New KOBeschreibungWill)
        KOS(64) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "BRENNER"), "BRENNER", Armeen.IB.ToString, New KOBeschreibungBrenner)
        KOS(65) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "LIN"), "LIN", Armeen.IB.ToString, New KOBeschreibungLin)
        KOS(66) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ISABELLA"), "ISABELLA", Armeen.IB.ToString, New KOBeschreibungIsabella)
        KOS(67) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "TASHA"), "TASHA", Armeen.LZ.ToString, New KOBeschreibungTasha)
        KOS(68) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "GAGE"), "GAGE", Armeen.LZ.ToString, New KOBeschreibungGage)
        KOS(69) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "CARTER"), "CARTER", Armeen.LZ.ToString, New KOBeschreibungCarter)
        KOS(70) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "WAYLON"), "WAYLON", Armeen.NR.ToString, New KOBeschreibungWaylon)
        KOS(71) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "GREYFIELD"), "GREYFIELD", Armeen.NR.ToString, New KOBeschreibungGreyfield)
        KOS(72) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "PENNY"), "PENNY", Armeen.DV.ToString, New KOBeschreibungPenny)
        KOS(73) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "TABITHA"), "TABITHA", Armeen.DV.ToString, New KOBeschreibungTabitha)
        KOS(74) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "CAULDER"), "CAULDER", Armeen.DV.ToString, New KOBeschreibungCaulder)
        KOS(75) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "IK-486-B7"), "IK-486-B7", Armeen.ML.ToString, New KOBeschreibungIK_486_B7)
        KOS(76) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "KEINKO"), "KEINKO", Armeen.OS.ToString, New KOBeschreibungKeinKO)
        KOS(77) = New Objektverwalter.KO(GetKOTexturName(KOBilderIDs, "ZUFALL"), "ZUFALL", Armeen.OS.ToString, New KOBeschreibungRandom)
        'So jetzt werden Custom KO's hergestellt.
        If Hauptmenue.Connection.Connected And Not Hauptmenue.Connection.Hosten Then
            If My.Computer.FileSystem.DirectoryExists(DataSettings.Resourcenpfad + "!Custom\Multiplayer\CO\") Then
                For Each CustomCO In My.Computer.FileSystem.GetFiles(DataSettings.Resourcenpfad + "!Custom\Multiplayer\CO\", FileIO.SearchOption.SearchTopLevelOnly, "*.CCO")
                    Array.Resize(KOS, KOS.Length + 1)
                    Array.Resize(Objektverwalter.CustomKOS, Objektverwalter.CustomKOS.Length + 1)
                    Dim C As New KOCustom
                    C.StartwerteLaden(CustomCO)
                    Dim KODesc As New KOBeschreibungCustom
                    If My.Computer.FileSystem.FileExists(DataSettings.Resourcenpfad + "!Custom\Multiplayer\CO\CO Desc\" + C.KOID + ".desc") Then
                        KODesc.LoadNewDesc(DataSettings.Resourcenpfad + "!Custom\Multiplayer\CO\CO Desc\" + C.KOID + ".desc")
                    End If
                    Dim T As Microsoft.DirectX.Direct3D.Texture
                    If My.Computer.FileSystem.FileExists(DataSettings.Resourcenpfad + "!Custom\Multiplayer\CO\CO Sprite\" + C.KOID + ".png") Then
                        T = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "!Custom\Multiplayer\CO\CO Sprite\" + C.KOID + ".png")
                    Else
                        T = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "CO's\CO\Zufall.png")
                    End If
                    KOS(KOS.Length - 1) = New Objektverwalter.KO(T, C.KOID, C.Armee, KODesc)
                    Objektverwalter.CustomKOS(Objektverwalter.CustomKOS.Length - 1) = C
                Next
            End If
        ElseIf My.Computer.FileSystem.DirectoryExists(DataSettings.Resourcenpfad + "!Custom\CO\") Then
            For Each CustomCO In My.Computer.FileSystem.GetFiles(DataSettings.Resourcenpfad + "!Custom\CO\", FileIO.SearchOption.SearchTopLevelOnly, "*.CCO")
                Array.Resize(KOS, KOS.Length + 1)
                Array.Resize(Objektverwalter.CustomKOS, Objektverwalter.CustomKOS.Length + 1)
                Dim C As New KOCustom
                C.StartwerteLaden(CustomCO)
                Dim KODesc As New KOBeschreibungCustom
                If My.Computer.FileSystem.FileExists(DataSettings.Resourcenpfad + "!Custom\CO\CO Desc\" + C.KOID + ".desc") Then
                    KODesc.LoadNewDesc(DataSettings.Resourcenpfad + "!Custom\CO\CO Desc\" + C.KOID + ".desc")
                End If
                Dim T As Microsoft.DirectX.Direct3D.Texture
                If My.Computer.FileSystem.FileExists(DataSettings.Resourcenpfad + "!Custom\CO\CO Sprite\" + C.KOID + ".png") Then
                    T = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "!Custom\CO\CO Sprite\" + C.KOID + ".png")
                Else
                    T = Grafikengine.LoadTexture(DataSettings.Resourcenpfad + "CO's\CO\OS\Zufall.png")
                End If
                KOS(KOS.Length - 1) = New Objektverwalter.KO(T, C.KOID, C.Armee, KODesc)
                Objektverwalter.CustomKOS(Objektverwalter.CustomKOS.Length - 1) = C
            Next
        End If




        Dim KleinerText As ObjektText = Nothing
        If TextNichtSplitten = False Then
            KleinerText = New ObjektText(New String() {}, 0, 0, Nothing, Schriftengine.Schriftarten.Arial_Unicode_MS, 8, FontStyle.Regular)
        End If

        Dim AktuelleSprache As Sprachen = DataSettings.Sprache
        If My.Computer.FileSystem.DirectoryExists(DataSettings.Resourcenpfad + "Language\" + AktuelleSprache.ToString) Then
            For I = 0 To KOS.Length - 1
                If My.Computer.FileSystem.FileExists(DataSettings.Resourcenpfad + "Language\" + AktuelleSprache.ToString + "\" + KOS(I).KOID + ".KOT") Then
                    KOS(I).KOBeschreibung.LoadNewDesc(DataSettings.Resourcenpfad + "Language\" + AktuelleSprache.ToString + "\" + KOS(I).KOID + ".KOT")
                Else
                    KOS(I).KOBeschreibung.UpdateDesc(KleinerText)
                End If
            Next
        End If

        Objektverwalter.NPCS.Clear()
        For Each NPC In My.Computer.FileSystem.GetFiles(DataSettings.Resourcenpfad + "CO's\CO\NPC\", FileIO.SearchOption.SearchAllSubDirectories, "*.png")
            Objektverwalter.NPCS.Add(New Objektverwalter.NPC(Grafikengine.LoadTexture(NPC), NPC.Replace(DataSettings.Resourcenpfad + "CO's\CO\NPC\", "").Replace("+", "").Replace(".png", "").ToUpper))
        Next
    End Sub

    Private Shared Function GetKOTexturName(ByVal KOTexturenBilder() As String, ByVal KOID As String) As String
        For I = 0 To KOTexturenBilder.Length - 1
            If KOTexturenBilder(I).StartsWith(KOID) Then
                Return KOTexturenBilder(I).Split(";")(1)
            End If
        Next
        Return KOID
    End Function
    ''' <summary>
    ''' Erstellt einen KO mit Startwerten
    ''' </summary>
    ''' <param name="KOID"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function NewKO(ByVal KOID As String, ByVal Spieler As Integer) As ObjektKO
        Select Case KOID.ToUpper
            Case "ADDER"
                Return New KOAdder(Spieler)
            Case "ALEXANDER"
                Return New KOAlexander(Spieler)
            Case "ANDY"
                Return New KOAndy(Spieler)
            Case "CANDY"
                Return New KOCandy(Spieler)
            Case "COLIN"
                Return New KOColin(Spieler)
            Case "CONRAD"
                Return New KOConrad(Spieler)
            Case "DRAKE"
                Return New KODrake(Spieler)
            Case "EAGLE"
                Return New KOEagle(Spieler)
            Case "EPOCH"
                Return New KOEpoch(Spieler)
            Case "GRIMM"
                Return New KOGrimm(Spieler)
            Case "HACHI"
                Return New KOHachi(Spieler)
            Case "HELMUT"
                Return New KOHelmut(Spieler)
            Case "JAKE"
                Return New KOJake(Spieler)
            Case "JAVIER"
                Return New KOJavier(Spieler)
            Case "JESS"
                Return New KOJess(Spieler)
            Case "JUGGER"
                Return New KOJugger(Spieler)
            Case "KANBEI"
                Return New KOKanbei(Spieler)
            Case "KAT"
                Return New KOKat(Spieler)
            Case "KID"
                Return New KOKid(Spieler)
            Case "MAVERIK"
                Return New KOMaverik(Spieler)
            Case "MAX"
                Return New KOMax(Spieler)
            Case "MELANTHE"
                Return New KOMelanthe(Spieler)
            Case "NAPOLEON"
                Return New KONapoleon(Spieler)
            Case "NELL"
                Return New KONell(Spieler)
            Case "OLAF"
                Return New KOOlaf(Spieler)
            Case "OZZY"
                Return New KOOzzy(Spieler)
            Case "PETER"
                Return New KOPeter(Spieler)
            Case "RACHEL"
                Return New KORachel(Spieler)
            Case "SABAKI"
                Return New KOSabaki(Spieler)
            Case "SASHA"
                Return New KOSasha(Spieler)
            Case "SENSEI"
                Return New KOSensei(Spieler)
            Case "SMITAN"
                Return New KOSmitan(Spieler)
            Case "SONJA"
                Return New KOSonja(Spieler)
            Case "SOPHIE"
                Return New KOSophie(Spieler)
            Case "STURM"
                Return New KOSturm(Spieler)
            Case "TAMI"
                Return New KOTami(Spieler)
            Case "VON BOLT"
                Return New KOVon_Bolt(Spieler)
            Case "ZAK"
                Return New KOZak(Spieler)
            Case "RATTIGAN"
                Return New KORattigan(Spieler)
            Case "EMBER"
                Return New KOEmber(Spieler)
            Case "TEMPEST"
                Return New KOTempest(Spieler)
            Case "CARMEN"
                Return New KOCarmen(Spieler)
            Case "SANJURO"
                Return New KOSanjuro(Spieler)
            Case "MINAMOTO"
                Return New KOMinamoto(Spieler)
            Case "GRAVES"
                Return New KOGraves(Spieler)
            Case "ROBOANDY"
                Return New KORobandy(Spieler)
            Case "ADAM"
                Return New KOAdam(Spieler)
            Case "AMY"
                Return New KOAmy(Spieler)
            Case "WALTER"
                Return New KOWalter(Spieler)
            Case "VARLOT"
                Return New KOVarlot(Spieler)
            Case "MARY"
                Return New KOMary(Spieler)
            Case "ERIC"
                Return New KOEric(Spieler)
            Case "EDWARD"
                Return New KOEdward(Spieler)
            Case "KOSHI"
                Return New KOKoshi(Spieler)
            Case "JARED"
                Return New KOJared(Spieler)
            Case "ZANDRA"
                Return New KOZandra(Spieler)
            Case "LECHIFFRE"
                Return New KOLeChiffre(Spieler)
            Case "LEVENWORTH"
                Return New KOLevenworth(Spieler)
            Case "ALEX"
                Return New KOAlex(Spieler)
            Case "ROBOSTURM"
                Return New KORobosturm(Spieler)
            Case "ALEXIS"
                Return New KOAlexis(Spieler)
            Case "JULIA"
                Return New KOJulia(Spieler)
            Case "ARTEMIS"
                Return New KOArtemis(Spieler)
            Case "WILL"
                Return New KOWill(Spieler)
            Case "BRENNER"
                Return New KOBrenner(Spieler)
            Case "LIN"
                Return New KOLin(Spieler)
            Case "ISABELLA"
                Return New KOIsabella(Spieler)
            Case "TASHA"
                Return New KOTasha(Spieler)
            Case "GAGE"
                Return New KOGage(Spieler)
            Case "CARTER"
                Return New KOCarter(Spieler)
            Case "WAYLON"
                Return New KOWaylon(Spieler)
            Case "GREYFIELD"
                Return New KOGreyfield(Spieler)
            Case "PENNY"
                Return New KOPenny(Spieler)
            Case "TABITHA"
                Return New KOTabitha(Spieler)
            Case "CAULDER"
                Return New KOCaulder(Spieler)
            Case "ZUFALL"
                Return New KOZufall(Spieler)
            Case "IK-486-B7"
                Return New KOIK_486_B7(Spieler)
            Case "NOTHING", "-"
                Return Nothing
            Case "KEINKO"
                Return New KOKeinKO(Spieler)
            Case Else
                For I = 0 To Objektverwalter.CustomKOS.Length - 1
                    If Objektverwalter.CustomKOS(I).KOID = KOID Then
                        Return New KOCustom(Spieler, I)
                    End If
                Next
                Return New KOKeinKO(Spieler)
        End Select
    End Function
    ''' <summary>
    ''' Erstellt einen KO mit fortgeschrittener Gabeleiste
    ''' </summary>
    ''' <param name="KOID"></param>
    ''' <param name="Gabefuellstand"></param>
    ''' <param name="Gabenart"></param>
    ''' <param name="neuSternkosten"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function NewKO(ByVal KOID As String, ByVal Spieler As Integer, ByVal Gabefuellstand As Integer, ByVal Gabenart As ObjektKO.Gabemodi, ByVal neuSternkosten As Integer, Optional ByVal KOBild As String = "") As ObjektKO
        Select Case KOID.ToUpper
            Case "ADDER"
                Return New KOAdder(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "ALEXANDER"
                Return New KOAlexander(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "ANDY"
                Return New KOAndy(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "CANDY"
                Return New KOCandy(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "COLIN"
                Return New KOColin(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "CONRAD"
                Return New KOConrad(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "DRAKE"
                Return New KODrake(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "EAGLE"
                Return New KOEagle(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "EPOCH"
                Return New KOEpoch(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "GRIMM"
                Return New KOGrimm(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "HACHI"
                Return New KOHachi(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "HELMUT"
                Return New KOHelmut(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "JAKE"
                Return New KOJake(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "JAVIER"
                Return New KOJavier(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "JESS"
                Return New KOJess(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "JUGGER"
                Return New KOJugger(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "KANBEI"
                Return New KOKanbei(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "KAT"
                Return New KOKat(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "KID"
                Return New KOKid(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "MAVERIK"
                Return New KOMaverik(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "MAX"
                Return New KOMax(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "MELANTHE"
                Return New KOMelanthe(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "NAPOLEON"
                Return New KONapoleon(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "NELL"
                Return New KONell(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "OLAF"
                Return New KOOlaf(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "OZZY"
                Return New KOOzzy(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "PETER"
                Return New KOPeter(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "RACHEL"
                Return New KORachel(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "SABAKI"
                Return New KOSabaki(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "SASHA"
                Return New KOSasha(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "SENSEI"
                Return New KOSensei(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "SMITAN"
                Return New KOSmitan(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "SONJA"
                Return New KOSonja(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "SOPHIE"
                Return New KOSophie(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "STURM"
                Return New KOSturm(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "TAMI"
                Return New KOTami(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "VON BOLT"
                Return New KOVon_Bolt(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "ZAK"
                Return New KOZak(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "RATTIGAN"
                Return New KORattigan(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "EMBER"
                Return New KOEmber(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "TEMPEST"
                Return New KOTempest(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "CARMEN"
                Return New KOCarmen(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "SANJURO"
                Return New KOSanjuro(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "MINAMOTO"
                Return New KOMinamoto(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "GRAVES"
                Return New KOGraves(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "ROBOANDY"
                Return New KORobandy(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "ADAM"
                Return New KOAdam(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "AMY"
                Return New KOAmy(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "WALTER"
                Return New KOWalter(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "VARLOT"
                Return New KOVarlot(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "MARY"
                Return New KOMary(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "ERIC"
                Return New KOEric(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "EDWARD"
                Return New KOEdward(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "KOSHI"
                Return New KOKoshi(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "JARED"
                Return New KOJared(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "ZANDRA"
                Return New KOZandra(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "LECHIFFRE"
                Return New KOLeChiffre(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "LEVENWORTH"
                Return New KOLevenworth(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "ALEX"
                Return New KOAlex(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "ROBOSTURM"
                Return New KORobosturm(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "ALEXIS"
                Return New KOAlexis(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "JULIA"
                Return New KOJulia(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "ARTEMIS"
                Return New KOArtemis(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "WILL"
                Return New KOWill(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "BRENNER"
                Return New KOBrenner(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "LIN"
                Return New KOLin(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "ISABELLA"
                Return New KOIsabella(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "TASHA"
                Return New KOTasha(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "GAGE"
                Return New KOGage(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "CARTER"
                Return New KOCarter(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "WAYLON"
                Return New KOWaylon(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "GREYFIELD"
                Return New KOGreyfield(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "PENNY"
                Return New KOPenny(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "TABITHA"
                Return New KOTabitha(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "CAULDER"
                Return New KOCaulder(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "IK-486-B7"
                Return New KOIK_486_B7(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case "NOTHING", "-"
                Return Nothing
            Case "KEINKO"
                Return New KOKeinKO(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
            Case Else
                For I = 0 To Objektverwalter.CustomKOS.Length - 1
                    If Objektverwalter.CustomKOS(I).KOID = KOID Then
                        Return New KOCustom(Spieler, Gabefuellstand, Gabenart, neuSternkosten, I)
                    End If
                Next
                If KOID.StartsWith("CLONE") Then
                    Return New KOClone(Spieler, Gabefuellstand, Gabenart, neuSternkosten, KOBild, KOID.Replace("CLONE", ""))
                Else
                    Return New KOKeinKO(Spieler, Gabefuellstand, Gabenart, neuSternkosten)
                End If
        End Select
    End Function
    ''' <summary>
    ''' Gibt den KO Namen zurueck wenn man die KO ID kennt
    ''' </summary>
    ''' <param name="KOID"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetKONameByKOID(ByVal KOID As String) As String
        Dim ID As Integer = Objektverwalter.GetKOID(KOID)
        If ID < 0 Then
            Return "Unbekannter KO"
        Else
            Return Objektverwalter.GetKO(ID).KOBeschreibung.Name
        End If
    End Function
    ''' <summary>
    ''' Erstellt die Richtige COListe!
    ''' </summary>
    ''' <param name="Spielmodus"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetRandomCOList(ByVal Spielmodus As CommanderWarsGameModi) As String()
        Dim COList As String() = {}
        Select Case Spielmodus
            Case CommanderWarsGameModi.AdvanceWars
                COList = Hauptmenue.User.GetRandomCOList("COListAW").Split("|")
            Case CommanderWarsGameModi.AdvanceWars2
                COList = Hauptmenue.User.GetRandomCOList("COListAW2").Split("|")
            Case CommanderWarsGameModi.AdvanceWarsDS
                COList = Hauptmenue.User.GetRandomCOList("COListAWDS").Split("|")
            Case CommanderWarsGameModi.CommanderWars
                COList = Hauptmenue.User.GetRandomCOList("COListCoW").Split("|")
            Case CommanderWarsGameModi.AdvanceWarsDC
                COList = Hauptmenue.User.GetRandomCOList("COListAWDC").Split("|")
            Case Else
                COList = Hauptmenue.User.GetRandomCOList("COListCoW").Split("|")
        End Select
        Return COList
    End Function

    Public Shared Sub ImportKOfromCW(ByVal Datei As String)
        If My.Computer.FileSystem.FileExists(Datei) Then
            Dim KO As String = Datei.Remove(0, Datei.LastIndexOf("\") + 1)
            KO = KO.Remove(KO.Length - 5, 5)
            Using Reader As New IO.StreamReader(Datei)
                Using Writer As New IO.StreamWriter(DataSettings.Resourcenpfad + "Language\English\" + KO + ".KOT")
                    While Not Reader.EndOfStream
                        Dim Zeile As String = Reader.ReadLine.Trim
                        'Der KO Name
                        If Zeile.ToLower.StartsWith("name = """) Then
                            Writer.WriteLine("Name:" + Zeile.Split("""")(1))
                            Continue While
                        End If
                        'Fein
                        If Zeile.ToLower.StartsWith("string hitx") Then
                            Writer.WriteLine("Fein:" + Zeile.Split("""")(1))
                            Continue While
                        End If
                        'Nein
                        If Zeile.ToLower.StartsWith("string missx") Then
                            Writer.WriteLine("Nein:" + Zeile.Split("""")(1))
                            Continue While
                        End If

                        'Gabenamen
                        If Zeile.ToLower.StartsWith("copname") Then
                            Dim Z As String = Zeile.Split("""")(1) + "|"
                            Z += Reader.ReadLine.Trim.Split("""")(1)
                            Writer.WriteLine("Gaben:" + Z)
                            Continue While
                        End If
                        'Stil
                        If Zeile.ToLower.StartsWith("string skillstringx") Then
                            Writer.WriteLine("Stil:" + Zeile.Split("""")(1))
                            Continue While
                        End If
                        'Gabebeschreibung
                        If Zeile.ToLower.StartsWith("string powerstringx") Then
                            Writer.WriteLine("Gabebeschreibung:" + Zeile.Split("""")(1))
                            Continue While
                        End If
                        'Spezialgabebeschreibung
                        If Zeile.ToLower.StartsWith("string superpowerstringx") Then
                            Writer.WriteLine("SpezialGabebeschreibung:" + Zeile.Split("""")(1))
                            Continue While
                        End If
                        'KO Beschreibung
                        If Zeile.ToLower.StartsWith("string cobiox") Then
                            Dim Z As String = Zeile.Split("""")(1)
                            While True
                                Zeile = Reader.ReadLine.Trim
                                If Zeile.Contains("//") Then
                                    Zeile = Zeile.Remove(Zeile.IndexOf("//"))
                                End If
                                If Zeile.EndsWith(";") Then
                                    Z += Zeile.Split("""")(1)
                                    Exit While
                                Else
                                    Z += Zeile.Split("""")(1)
                                End If
                            End While
                            Writer.WriteLine("Beschreibung:" + Z)
                            Continue While
                        End If
                        'Gabesaetze
                        If Zeile.ToLower.StartsWith("string[] copowerx") Then
                            Zeile = Reader.ReadLine.Trim
                            Dim Z As String = Zeile.Split("""")(1) + "|"
                            While True
                                Zeile = Reader.ReadLine.Trim
                                If Zeile.Contains("//") Then
                                    Zeile = Zeile.Remove(Zeile.IndexOf("//"))
                                End If
                                If Zeile.EndsWith(";") Then
                                    Z += Zeile.Split("""")(1)
                                    Exit While
                                Else
                                    Z += Zeile.Split("""")(1) + "|"
                                End If
                            End While
                            Writer.WriteLine("Gabesaetze:" + Z)
                            Continue While
                        End If
                        'Siegsaetze
                        If Zeile.ToLower.StartsWith("string[] victoryx") Then
                            Zeile = Reader.ReadLine.Trim
                            Dim Z As String = Zeile.Split("""")(1) + "|"
                            While True
                                Zeile = Reader.ReadLine.Trim
                                If Zeile.Contains("//") Then
                                    Zeile = Zeile.Remove(Zeile.IndexOf("//"))
                                End If
                                If Zeile.EndsWith(";") Then
                                    Z += Zeile.Split("""")(1)
                                    Exit While
                                Else
                                    Z += Zeile.Split("""")(1) + "|"
                                End If
                            End While
                            Writer.WriteLine("Siegsaetze:" + Z)
                            Continue While
                        End If
                        'Tauschsaetze
                        If Zeile.ToLower.StartsWith("string[] swapx") Then
                            Zeile = Reader.ReadLine.Trim
                            Dim Z As String = Zeile.Split("""")(1) + "|"
                            While True
                                Zeile = Reader.ReadLine.Trim
                                If Zeile.Contains("//") Then
                                    Zeile = Zeile.Remove(Zeile.IndexOf("//"))
                                End If
                                If Zeile.EndsWith(";") Then
                                    Z += Zeile.Split("""")(1)
                                    Exit While
                                Else
                                    Z += Zeile.Split("""")(1) + "|"
                                End If
                            End While
                            Writer.WriteLine("Tauschsaetze:" + Z)
                            Continue While
                        End If
                    End While
                End Using
            End Using
        End If
    End Sub
#End Region
#Region "Animationen"
    Public Shared Function AnimationEinheitExplosion(ByVal Explosion As String, ByVal X As Integer, ByVal Y As Integer, ByVal Musikspielen As Boolean, ByVal Schlacht As Integer) As ObjektAnimation
        Select Case Explosion.ToUpper
            Case "LAND"
                Return New AnimationExplosionLand(X, Y, Musikspielen, Schlacht)
            Case "LUFT"
                Return New AnimationExplosionLuft(X, Y, Musikspielen, Schlacht)
            Case "WASSER"
                Return New AnimationExplosionSee(X, Y, Musikspielen, Schlacht)
            Case Else
                Return New AnimationExplosionLand(X, Y, Musikspielen, Schlacht)
        End Select
    End Function
    Public Shared Function Animation(ByVal X As Integer, ByVal Y As Integer, ByVal Explosion As String, ByVal Musikspielen As Boolean, ByVal Schlacht As Integer) As ObjektAnimation
        Select Case Explosion.ToUpper
            Case "SILOEXPLOSION+KLEIN"
                Return New AnimationSiloExplosion(X, Y, Musikspielen, Schlacht)
            Case "RATION"
                Return New AnimationInfoPfeil(Explosion, "Ration", X, Y, Musikspielen, Schlacht)
            Case "FALLE"
                Return New AnimationInfoPfeil(Explosion, "Falle", X, Y, Musikspielen, Schlacht)
            Case "PFEIL"
                Return New AnimationPfeil(Explosion, "", X, Y, Musikspielen, Schlacht)
            Case "LAND"
                Return New AnimationExplosionLand(X, Y, Musikspielen, Schlacht)
            Case "LUFT"
                Return New AnimationExplosionLuft(X, Y, Musikspielen, Schlacht)
            Case "WASSER"
                Return New AnimationExplosionSee(X, Y, Musikspielen, Schlacht)
            Case "NUKLEAR"
                Return New AnimationExplosionNuklear(X, Y, Musikspielen, Schlacht)
            Case "BOMBE"
                Return New AnimationExplosionBombe(X, Y, Musikspielen, Schlacht)
            Case "KRISTALL"
                Return New AnimationKristall(X, Y, Musikspielen, Schlacht)
            Case "METEOR"
                Return New AnimationMeteor(X, Y, Musikspielen, Schlacht)
            Case "BESETZEN"
                Return New AnimationBesetzung(X, Y, Musikspielen, Schlacht)
            Case "GABEEINSATZ"
                Return New AnimationGabeEinsatz(Musikspielen)
            Case "VULKANAUSBRUCH"
                Return New AnimationVulkanAusbruch(X, Y, Musikspielen)
            Case "VULKANEINSCHLAG"
                Return New AnimationVulkanEinschlag(X, Y, Musikspielen)
            Case "LASERSTRAHL"
                Return New AnimationLaserstrahl(X, Y, Musikspielen)
            Case "GESCHUETZFEUER"
                Return New AnimationGeschuetztreffer(X, Y, Musikspielen, Schlacht)
            Case "SCREENFLASH"
                Return New AnimationScreenflash(Musikspielen)
            Case "ANDYGABE"
                Return New AnimationAndyGabe(X, Y, Musikspielen, Schlacht)
            Case "MAXGABE"
                Return New AnimationMaxGabe(X, Y, Musikspielen, Schlacht)
            Case "TAMIGABE"
                Return New AnimationTamiGabe(X, Y, Musikspielen, Schlacht)
            Case "KIDGABE"
                Return New AnimationKidGabe(X, Y, Musikspielen, Schlacht)
            Case "KANBEIGABE"
                Return New AnimationKanbeiGabe(X, Y, Musikspielen, Schlacht)
            Case "KATGABE"
                Return New AnimationKatGabe(X, Y, Musikspielen, Schlacht)
            Case "SENSEIGABE"
                Return New AnimationSenseiGabe(X, Y, Musikspielen, Schlacht)
            Case "NELLGABE"
                Return New AnimationNellGabe(X, Y, Musikspielen, Schlacht)
            Case "DRAKEGABE"
                Return New AnimationDrakeGabe(X, Y, Musikspielen, Schlacht)
            Case "EAGLEGABE"
                Return New AnimationEagleGabe(X, Y, Musikspielen, Schlacht)
            Case "JESSGABE"
                Return New AnimationJessGabe(X, Y, Musikspielen, Schlacht)
            Case "OZZYGABE"
                Return New AnimationOzzyGabe(X, Y, Musikspielen, Schlacht)
            Case "AMYGABE"
                Return New AnimationAmyGabe(X, Y, Musikspielen, Schlacht)
            Case "SPEZIALGABE"
                Return New AnimationSpezialGabe(X, Y, Musikspielen, Schlacht)
            Case "SCHOCKLASER"
                Return New AnimationSchocklaser(X, Y, Musikspielen, Schlacht)
            Case "TALONGUNFIRE"
                Return New AnimationTalon_Gun(X, Y, Musikspielen, Schlacht)
            Case "TALONGUNTREFFER"
                Return New AnimationTalon_Gun_Treffer(X, Y, Musikspielen, Schlacht)
            Case Else
                Return New AnimationExplosionLand(X, Y, Musikspielen, Schlacht)
        End Select
    End Function
    ''' <summary>
    ''' Erzeugt eine Silo Explosion mit Radius und Explosionsart!
    ''' </summary>
    ''' <param name="Radius"></param>
    ''' <param name="Explosion">Die Endung der Explosion davor steht. "Explosion+"</param>
    ''' <param name="X1"></param>
    ''' <param name="Y1"></param>
    ''' <remarks></remarks>
    Public Shared Sub SiloExplosion(ByVal Radius As Integer, ByVal Explosion As String, ByVal X1 As Integer, ByVal Y1 As Integer, ByVal Schlacht As Integer, Optional ByVal ExplosionMitte As String = "")
        If ExplosionMitte = "" Then ExplosionMitte = Explosion
        Dim WarteFrames As Integer = 0
        For MomentanerRadius = 0 To Radius
            Dim P As Point() = Kreisfelder(MomentanerRadius)
            For I = 0 To P.Length - 1
                Dim M1 As Boolean = False
                If I = 0 And MomentanerRadius = 0 Then M1 = True
                If Objektverwalter.Spielfeld.OnMap(P(I).X + X1, P(I).Y + Y1) Then
                    If P(I).X = 0 And P(I).Y = 0 Then
                        BackbufferSpiel.AddAnimation(ExplosionMitte, WarteFrames, New Point(P(I).X + X1, P(I).Y + Y1), M1, Schlacht)
                    Else
                        BackbufferSpiel.AddAnimation(Explosion, WarteFrames, New Point(P(I).X + X1, P(I).Y + Y1), M1, Schlacht)
                    End If

                End If
            Next
            WarteFrames += AnimationsWarteFrames
        Next
    End Sub
    Public Shared Sub KristallHeilung(ByVal Radius As Integer, ByVal NoAnimationRadius As Integer, ByVal Explosion As String, ByVal X1 As Integer, ByVal Y1 As Integer, ByVal Schlacht As Integer, Optional ByVal StartFrame As Integer = 0)
        Dim WarteFrames As Integer = 0
        Dim BlockFelder() As Point = Rechteck(NoAnimationRadius)
        For MomentanerRadius = 0 To Radius
            Dim P As Point() = Kreisfelder(MomentanerRadius)
            For I = 0 To P.Length - 1
                Dim M1 As Boolean = False
                If I = 0 And MomentanerRadius = 0 Then M1 = True
                If Objektverwalter.Spielfeld.OnMap(P(I).X + X1, P(I).Y + Y1) Then
                    If Not BlockFelder.Contains(P(I)) Then
                        BackbufferSpiel.AddAnimation(Explosion, WarteFrames, New Point(P(I).X + X1, P(I).Y + Y1), M1, Schlacht)
                    End If
                End If
            Next
            WarteFrames += AnimationsWarteFrames
        Next
    End Sub
    Public Shared Sub KreisFeuerAnimation(ByVal Radius As Integer, ByVal NoAnimationRadius As Integer, ByVal Explosion As String, ByVal X1 As Integer, ByVal Y1 As Integer, ByVal Schlacht As Integer, ByVal Team As Char, Optional ByVal StartFrame As Integer = 0, Optional ByVal HalteFrames As Integer = 0, Optional ByVal Random As Boolean = False)
        Dim WarteFrames As Integer = 0
        Dim BlockFelder() As Point = Rechteck(NoAnimationRadius)
        For MomentanerRadius = 0 To Radius
            Dim P As Point() = Kreisfelder(MomentanerRadius)
            For I = 0 To P.Length - 1
                Dim M1 As Boolean = False
                If I = 0 And MomentanerRadius = 0 Then M1 = True
                If Objektverwalter.Spielfeld.OnMap(P(I).X + X1, P(I).Y + Y1) Then
                    If Objektverwalter.Spielfeld.Einheiten(P(I).X + X1, P(I).Y + Y1, Schlacht) IsNot Nothing Then
                        If Objektverwalter.Spielfeld.Einheiten(P(I).X + X1, P(I).Y + Y1, Schlacht).GetSpieler.Team <> Team Then
                            If Not BlockFelder.Contains(P(I)) Then
                                BackbufferSpiel.AddAnimation(Explosion, WarteFrames, New Point(P(I).X + X1, P(I).Y + Y1), M1, Schlacht)
                            End If
                        ElseIf Random And Zufallszahl(0, 2) = 0 And Not Objektverwalter.Spielfeld.Einheiten(P(I).X + X1, P(I).Y + Y1, Schlacht).GetSpieler.Team = Team Then
                            If Not BlockFelder.Contains(P(I)) Then
                                BackbufferSpiel.AddAnimation(Explosion, WarteFrames, New Point(P(I).X + X1, P(I).Y + Y1), M1, Schlacht)
                            End If
                        End If
                    ElseIf Random And Zufallszahl(0, 1) = 0 Then
                        If Not BlockFelder.Contains(P(I)) Then
                            BackbufferSpiel.AddAnimation(Explosion, WarteFrames, New Point(P(I).X + X1, P(I).Y + Y1), M1, Schlacht)
                        End If
                    End If
                End If
            Next
            WarteFrames += HalteFrames
        Next
    End Sub
#End Region
#Region "Landschaften"
    ''' <summary>
    ''' Laedt alle Landschaftstexturen des Spiels
    ''' </summary>
    ''' <remarks></remarks>
    Public Shared Sub LandschaftsTexturenladen()
        For Each L In Objektverwalter.LandschaftenBilder
            L.Reset()
        Next
        Array.Resize(Objektverwalter.LandschaftenBilder, 47)

        'Normal
        Objektverwalter.LandschaftenBilder(0) = New LandschaftstexturEbene
        ObjektLandschaftsTextur.EbenenID = 0
        Objektverwalter.LandschaftenBilder(1) = New LandschaftstexturEbene_Schrott
        Objektverwalter.LandschaftenBilder(2) = New LandschaftstexturOedland
        Objektverwalter.LandschaftenBilder(3) = New LandschaftstexturWald
        Objektverwalter.LandschaftenBilder(4) = New LandschaftstexturBerg
        Objektverwalter.LandschaftenBilder(5) = New LandschaftstexturRuine
        Objektverwalter.LandschaftenBilder(6) = New LandschaftstexturStrasse
        Objektverwalter.LandschaftenBilder(7) = New LandschaftstexturFluss
        Objektverwalter.LandschaftenBilder(8) = New LandschaftstexturBruecke
        Objektverwalter.LandschaftenBilder(9) = New LandschaftstexturBauBruecke
        Objektverwalter.LandschaftenBilder(10) = New LandschaftstexturZugbruecke
        Objektverwalter.LandschaftenBilder(11) = New LandschaftstexturMauer
        Objektverwalter.LandschaftenBilder(12) = New LandschaftstexturPipeline
        Objektverwalter.LandschaftenBilder(13) = New LandschaftstexturSchweissnaht
        Objektverwalter.LandschaftenBilder(14) = New LandschaftstexturKAPUTTESCHWEISSNAHT
        Objektverwalter.LandschaftenBilder(15) = New LandschaftsTexturFeuer
        Objektverwalter.LandschaftenBilder(16) = New LandschaftsTexturPlasma
        Objektverwalter.LandschaftenBilder(17) = New LandschaftsTexturMeteor
        Objektverwalter.LandschaftenBilder(18) = New LandschaftstexturSee
        ObjektLandschaftsTextur.SeeID = 18
        Objektverwalter.LandschaftenBilder(19) = New LandschaftstexturRiff
        Objektverwalter.LandschaftenBilder(20) = New LandschaftstexturRaue_See
        Objektverwalter.LandschaftenBilder(21) = New LandschaftstexturNebel
        Objektverwalter.LandschaftenBilder(22) = New LandschaftstexturStrand

        'Wueste
        Objektverwalter.LandschaftenBilder(23) = New LandschaftstexturWueste
        ObjektLandschaftsTextur.WuestenID = 23
        Objektverwalter.LandschaftenBilder(24) = New LandschaftstexturWuestenSchrott
        Objektverwalter.LandschaftenBilder(25) = New LandschaftstexturKakteen
        Objektverwalter.LandschaftenBilder(26) = New LandschaftstexturFelsen
        Objektverwalter.LandschaftenBilder(27) = New LandschaftstexturPfad

        Objektverwalter.LandschaftenBilder(28) = New LandschaftstexturAusgetrocknetesFlussbett

        Objektverwalter.LandschaftenBilder(29) = New LandschaftstexturPipe
        Objektverwalter.LandschaftenBilder(30) = New LandschaftstexturPipeschweiss
        Objektverwalter.LandschaftenBilder(31) = New LandschaftstexturKAPUTTEPIPESCHWEISS
        Objektverwalter.LandschaftenBilder(32) = New LandschaftsTexturW_Plasma
        Objektverwalter.LandschaftenBilder(33) = New LandschaftsTexturW_Meteor



        'Schnee
        Objektverwalter.LandschaftenBilder(34) = New LandschaftstexturSchnee
        ObjektLandschaftsTextur.SchneeID = 34
        Objektverwalter.LandschaftenBilder(35) = New LandschaftstexturSchneeSchrott
        Objektverwalter.LandschaftenBilder(36) = New LandschaftstexturKieferen
        Objektverwalter.LandschaftenBilder(37) = New LandschaftstexturGipfel

        Objektverwalter.LandschaftenBilder(38) = New LandschaftstexturStrassenfrost
        Objektverwalter.LandschaftenBilder(39) = New LandschaftstexturPline
        Objektverwalter.LandschaftenBilder(40) = New LandschaftstexturPlineSchweiss
        Objektverwalter.LandschaftenBilder(41) = New LandschaftstexturPLineKaputt
        Objektverwalter.LandschaftenBilder(42) = New LandschaftsTexturS_Plasma
        Objektverwalter.LandschaftenBilder(43) = New LandschaftsTexturS_Meteor

        'Sonstige
        Objektverwalter.LandschaftenBilder(44) = New LandschaftstexturSumpf


        'AW DC Spezial Terrain


        'Luftschlacht Landschaften
        Objektverwalter.LandschaftenBilder(45) = New LandschaftstexturLuft
        Objektverwalter.LandschaftenBilder(46) = New LandschaftstexturWolken
    End Sub

#End Region
#Region "Gebaeude"
    ''' <summary>
    ''' Erstellt ein Gebaeude mit Startwerten.
    ''' </summary>
    ''' <param name="GebaeudeID"></param>
    ''' <param name="Spieler"></param>
    ''' <param name="X"></param>
    ''' <param name="Y"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function NewGebaeude(ByVal GebaeudeID As String, ByVal Spieler As Integer, ByVal X As Integer, ByVal Y As Integer, Optional ByVal Schlacht As Integer = 0, Optional ByVal Spielfeld As ObjektSpielfeld = Nothing) As ObjektGebaeude
        Select Case GebaeudeID.ToUpper
            Case "ARUURA"
                Return New GebaeudeAruura(Spieler, X, Y, Spielfeld)
            Case "BASIS"
                Return New GebaeudeBasis(Spieler, X, Y, Spielfeld)
            Case "FLUGHAFEN"
                Return New GebaeudeFlughafen(Spieler, X, Y, Spielfeld)
            Case "WERFT"
                Return New GebaeudeHafen(Spieler, X, Y, Spielfeld)
            Case "HQ"
                Return New GebaeudeHQ(Spieler, X, Y, Spielfeld)
            Case "KRISTALL"
                Return New GebaeudeKristall(Spieler, X, Y, Spielfeld)
            Case "LABOR"
                Return New GebaeudeLabor(Spieler, X, Y, Spielfeld)
            Case "LASER"
                Return New GebaeudeLaser(Spieler, X, Y, Spielfeld)
            Case "MINIGESCHUETZ+N"
                Return New GebaeudeMinigeschuetz_N(Spieler, X, Y, Spielfeld)
            Case "MINIGESCHUETZ+W"
                Return New GebaeudeMinigeschuetz_W(Spieler, X, Y, Spielfeld)
            Case "MINIGESCHUETZ+O"
                Return New GebaeudeMinigeschuetz_O(Spieler, X, Y, Spielfeld)
            Case "MINIGESCHUETZ+S"
                Return New GebaeudeMinigeschuetz_S(Spieler, X, Y, Spielfeld)
            Case "MONOLITH"
                Return New GebaeudeMonolith(Spieler, X, Y, Spielfeld)
            Case "PIPESTATION"
                Return New GebaeudePipestation(Spieler, X, Y, Spielfeld)
            Case "RAKETENSILO"
                Return New GebaeudeRaketensilo(Spieler, X, Y, Spielfeld)
            Case "RAKETENSILO+RAKETE"
                Return New GebaeudeRaketensilo_Rakete(Spieler, X, Y, Spielfeld)
            Case "SCHWARZE GESCHUETZ+N"
                Return New GebaeudeSchwarze_Geschuetz_N(Spieler, X, Y, Spielfeld)
            Case "SCHWARZE GESCHUETZ+O"
                Return New GebaeudeSchwarze_Geschuetz_O(Spieler, X, Y, Spielfeld)
            Case "SCHWARZE GESCHUETZ+S"
                Return New GebaeudeSchwarze_Geschuetz_S(Spieler, X, Y, Spielfeld)
            Case "SCHWARZE GESCHUETZ+W"
                Return New GebaeudeSchwarze__Geschuetz_W(Spieler, X, Y, Spielfeld)
            Case "SCHOCKLASER+S"
                Return New GebaeudeSchocklaser_S(Spieler, X, Y, Spielfeld)
            Case "SCHOCKLASER+W"
                Return New GebaeudeSchocklaser_W(Spieler, X, Y, Spielfeld)
            Case "SCHOCKLASER+O"
                Return New GebaeudeSchocklaser_O(Spieler, X, Y, Spielfeld)
            Case "SCHOCKLASER+N"
                Return New GebaeudeSchocklaser_N(Spieler, X, Y, Spielfeld)
            Case "FABRIK"
                Return New GebaeudeFabrik(Spieler, X, Y, Spielfeld)
            Case "STADT"
                Return New GebaeudeStadt(Spieler, X, Y, Spielfeld)
            Case "TURM"
                Return New GebaeudeTurm(Spieler, X, Y, Spielfeld)
            Case "VULKAN"
                Return New GebaeudeVulkan(Spieler, X, Y, Spielfeld)
            Case "OMEGARAKETE"
                Return New GebaeudeOmega_Rakete(Spieler, X, Y, Spielfeld)
            Case "FESTUNG"
                Return New GebaeudeFestung(Spieler, X, Y, Spielfeld)
            Case "MINE"
                Return New GebaeudeMine(Spieler, X, Y, Spielfeld)
            Case "FLIEGENDESMINIGESCHUETZ+N"
                Return New GebaeudeFliegendesMinigeschuetz_N(Spieler, X, Y, Spielfeld)
            Case "FLIEGENDESMINIGESCHUETZ+O"
                Return New GebaeudeFliegendesMinigeschuetz_O(Spieler, X, Y, Spielfeld)
            Case "FLIEGENDESMINIGESCHUETZ+S"
                Return New GebaeudeFliegendesMinigeschuetz_S(Spieler, X, Y, Spielfeld)
            Case "FLIEGENDESMINIGESCHUETZ+W"
                Return New GebaeudeFliegendesMinigeschuetz_W(Spieler, X, Y, Spielfeld)
            Case "FLIEGENDEFESTUNG"
                Return New GebaeudeFliegendeFestung(Spieler, X, Y, Spielfeld)
            Case "RADAR"
                Return New GebaeudeRadar(Spieler, X, Y, Spielfeld)
            Case "TEMPWERFT"
                Return New GebaeudeTemporaererHafen(Spieler, X, Y, Spielfeld)
            Case "TEMPFLUGHAFEN"
                Return New GebaeudeTemporaererFlughafen(Spieler, X, Y, Spielfeld)
            Case "ARUURAZERSTOERT"
                Return New GebaeudeAruura_Zerstoert(Spieler, X, Y, Spielfeld)
            Case "VERWEIS"
                Return New GebaeudeVerweis(Spieler, X, Y, Schlacht)
            Case Else
                Return Nothing
        End Select
    End Function
    ''' <summary>
    ''' Erstellt ein Gebaeude mit festgelegten Werten.
    ''' </summary>
    ''' <param name="GebaeudeID"></param>
    ''' <param name="Spieler"></param>
    ''' <param name="X"></param>
    ''' <param name="Y"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function NewGebaeude(ByVal GebaeudeID As String, ByVal Spieler As Integer, ByVal Leben As Integer, ByVal Besetzungszahl As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal Feuerzahl As Integer, Optional ByVal Schlacht As Integer = 0, Optional ByVal Spielfeld As ObjektSpielfeld = Nothing) As ObjektGebaeude
        Select Case GebaeudeID.ToUpper
            Case "BASIS"
                Return New GebaeudeBasis(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "FLUGHAFEN"
                Return New GebaeudeFlughafen(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "WERFT"
                Return New GebaeudeHafen(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "HQ"
                Return New GebaeudeHQ(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "KRISTALL"
                Return New GebaeudeKristall(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "LABOR"
                Return New GebaeudeLabor(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "LASER"
                Return New GebaeudeLaser(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "MINIGESCHUETZ+N"
                Return New GebaeudeMinigeschuetz_N(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "MINIGESCHUETZ+W"
                Return New GebaeudeMinigeschuetz_W(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "MINIGESCHUETZ+O"
                Return New GebaeudeMinigeschuetz_O(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "MINIGESCHUETZ+S"
                Return New GebaeudeMinigeschuetz_S(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "MONOLITH"
                Return New GebaeudeMonolith(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "ARUURA"
                Return New GebaeudeAruura(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "PIPESTATION"
                Return New GebaeudePipestation(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "RAKETENSILO"
                Return New GebaeudeRaketensilo(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "RAKETENSILO+RAKETE"
                Return New GebaeudeRaketensilo_Rakete(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "SCHWARZE GESCHUETZ+N"
                Return New GebaeudeSchwarze_Geschuetz_N(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "SCHWARZE GESCHUETZ+O"
                Return New GebaeudeSchwarze_Geschuetz_O(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "SCHWARZE GESCHUETZ+S"
                Return New GebaeudeSchwarze_Geschuetz_S(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "SCHWARZE GESCHUETZ+W"
                Return New GebaeudeSchwarze__Geschuetz_W(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "SCHOCKLASER+S"
                Return New GebaeudeSchocklaser_S(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "SCHOCKLASER+W"
                Return New GebaeudeSchocklaser_W(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "SCHOCKLASER+O"
                Return New GebaeudeSchocklaser_O(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "SCHOCKLASER+N"
                Return New GebaeudeSchocklaser_N(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "FABRIK"
                Return New GebaeudeFabrik(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "STADT"
                Return New GebaeudeStadt(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "TURM"
                Return New GebaeudeTurm(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "VULKAN"
                Return New GebaeudeVulkan(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "OMEGARAKETE"
                Return New GebaeudeOmega_Rakete(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "FESTUNG"
                Return New GebaeudeFestung(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "MINE"
                Return New GebaeudeMine(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "FLIEGENDESMINIGESCHUETZ+N"
                Return New GebaeudeFliegendesMinigeschuetz_N(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "FLIEGENDESMINIGESCHUETZ+O"
                Return New GebaeudeFliegendesMinigeschuetz_O(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "FLIEGENDESMINIGESCHUETZ+S"
                Return New GebaeudeFliegendesMinigeschuetz_S(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "FLIEGENDESMINIGESCHUETZ+W"
                Return New GebaeudeFliegendesMinigeschuetz_W(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "FLIEGENDEFESTUNG"
                Return New GebaeudeFliegendeFestung(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "RADAR"
                Return New GebaeudeRadar(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "TEMPWERFT"
                Return New GebaeudeTemporaererHafen(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "TEMPFLUGHAFEN"
                Return New GebaeudeTemporaererFlughafen(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "ARUURAZERSTOERT"
                Return New GebaeudeAruura_Zerstoert(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Spielfeld)
            Case "VERWEIS"
                Return New GebaeudeVerweis(Spieler, Leben, Besetzungszahl, X, Y, Feuerzahl, Schlacht)
            Case Else
                Return Nothing
        End Select
    End Function
    ''' <summary>
    ''' Erstellt ein Gebaeude um Daten auszulesen
    ''' </summary>
    ''' <param name="GebaeudeID"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function NewGebaeude(ByVal GebaeudeID As String) As ObjektGebaeude
        Select Case GebaeudeID.ToUpper
            Case "MONOLITH"
                Return New GebaeudeMonolith()
            Case "ARUURA"
                Return New GebaeudeAruura()
            Case "SCHWARZE GESCHUETZ+N"
                Return New GebaeudeSchwarze_Geschuetz_N
            Case "SCHWARZE GESCHUETZ+O"
                Return New GebaeudeSchwarze_Geschuetz_O
            Case "SCHWARZE GESCHUETZ+S"
                Return New GebaeudeSchwarze_Geschuetz_S
            Case "SCHWARZE GESCHUETZ+W"
                Return New GebaeudeSchwarze__Geschuetz_W
            Case "SCHOCKLASER+S"
                Return New GebaeudeSchocklaser_S
            Case "SCHOCKLASER+W"
                Return New GebaeudeSchocklaser_W
            Case "SCHOCKLASER+O"
                Return New GebaeudeSchocklaser_O
            Case "SCHOCKLASER+N"
                Return New GebaeudeSchocklaser_N
            Case "FABRIK"
                Return New GebaeudeFabrik
            Case "VULKAN"
                Return New GebaeudeVulkan
            Case "OMEGARAKETE"
                Return New GebaeudeOmega_Rakete
            Case "FESTUNG"
                Return New GebaeudeFestung
            Case "FLIEGENDEFESTUNG"
                Return New GebaeudeFliegendeFestung
            Case "ARUURAZERSTOERT"
                Return New GebaeudeAruura_Zerstoert
            Case Else
                Return Nothing
        End Select
    End Function
    ''' <summary>
    ''' Gibt die Bauliste eines Gebaeudes zurueck.
    ''' </summary>
    ''' <param name="Bauliste"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetBauliste(ByVal Bauliste As String) As String()
        Dim Liste As String() = {}
        Select Case Bauliste.ToUpper
            Case "BASIS"
                Liste = New String() {"INF", MovementSorts.Mech.ToString.ToUpper, "MOTORRAD", "SSIEINHEIT", "SPAEHER", "TTP", "FLARE", "BAUPANZER", "TTL", "ART", "JGPZ", "FLAK", "PANZERABWEHRKANONE", "HOVERFLAK", "MISSILE", "RKW", "KPZ", "LAEUFER", "HOVERCRAFT", "TITANPZ", "ABPZ", "SCHWERESHOVERCRAFT", "MEGAPZ"}
            Case "LABOR"
                Liste = New String() {MovementSorts.Hoellium.ToString.ToUpper}
            Case "WERFT"
                Liste = New String() {"KANONENBOOT", "S-BOOT", "L-BOOT", "HOVERFLAK", "VERSORGUNGSSCHIFF", "KREUZER", "U-BOOT", "HOVERCRAFT", "ABPZ", "SCHWERESHOVERCRAFT", "ZERSTOERER", "SCHLFF", "FLTR"}
            Case "FLUGHAFEN"
                Select Case DataSettings.CommanderWarsGameModus
                    Case CommanderWarsGameModi.CommanderWars2
                        Liste = New String() {"T-HELI", "K-HELI", "AUFKLAERER", "JAEGER", "BOMBER", "ZEPPELIN", "WASSERFLUGZEUG", "TARNK", "T-FLUGZEUG", "S-BOMBE"}
                    Case Else
                        Liste = New String() {"T-HELI", "K-HELI", "AUFKLAERER", "JAEGER", "BOMBER", "ZEPPELIN", "TARNK", "T-FLUGZEUG", "S-BOMBE"}
                End Select

            Case "PIPESTATION"
                Liste = New String() {"TTL", "LAEUFER"}
            Case "FLUGZEUGTRAEGER"
                Select Case DataSettings.CommanderWarsGameModus
                    Case CommanderWarsGameModi.AdvanceWarsDC
                        Liste = New String() {"WASSERFLUGZEUG"}
                    Case CommanderWarsGameModi.CommanderWars2
                        Liste = New String() {"JAEGER", "BOMBER", "WASSERFLUGZEUG"}
                    Case Else
                        Liste = New String() {"T-HELI", "K-HELI", "AUFKLAERER", "WASSERFLUGZEUG", "JAEGER", "BOMBER", "ZEPPELIN", "TARNK", "T-FLUGZEUG", "S-BOMBE"}
                End Select

            Case Else
                Liste = New String() {}
        End Select
        For Each E In Objektverwalter.AlleEinheiten
            If TypeOf E.Einheit Is EinheitCustom Then
                Dim E2 As EinheitCustom = E.Einheit
                If E2.ProduktionsOrte.Contains(Bauliste) Then
                    Array.Resize(Liste, Liste.Length + 1)
                    Liste(Liste.Length - 1) = E2.EinheitenID
                End If
            End If
        Next
        Return Liste
    End Function
    ''' <summary>
    ''' Gibt zurueck wie viel Geld ein Gebaeude kostet wenn man es baut.
    ''' </summary>
    ''' <param name="GebaeudeID"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetGebaeudeKosten(ByVal GebaeudeID As String, ByVal Spieler As Integer) As Integer
        Select Case GebaeudeID.ToUpper
            Case "KRISTALL"
                Return 20000
            Case "LASER"
                Return 30000
            Case "MINIGESCHUETZ+N"
                Return 10000
            Case "MINIGESCHUETZ+W"
                Return 10000
            Case "MINIGESCHUETZ+O"
                Return 10000
            Case "MINIGESCHUETZ+S"
                Return 10000
            Case "FLIEGENDESMINIGESCHUETZ+N"
                Return 8000
            Case "FLIEGENDESMINIGESCHUETZ+O"
                Return 8000
            Case "FLIEGENDESMINIGESCHUETZ+S"
                Return 8000
            Case "FLIEGENDESMINIGESCHUETZ+W"
                Return 8000
            Case "MONOLITH"
                Return 40000
            Case "SCHWARZE GESCHUETZ+N"
                Return 30000
            Case "SCHWARZE GESCHUETZ+O"
                Return 30000
            Case "SCHWARZE GESCHUETZ+S"
                Return 30000
            Case "SCHWARZE GESCHUETZ+W"
                Return 30000
            Case "SCHOCKLASER+S"
                Return 50000
            Case "SCHOCKLASER+W"
                Return 50000
            Case "SCHOCKLASER+O"
                Return 50000
            Case "SCHOCKLASER+N"
                Return 50000
            Case "OMEGARAKETE"
                Return 40000
            Case "FESTUNG"
                Return 60000
            Case "FLIEGENDEFESTUNG"
                Return 40000
            Case "SILO"
                Return 10000
            Case "MAUER"
                Return 1000
            Case "BRUECKE"
                Return 5000
            Case Else
                Return -1
        End Select
    End Function
    ''' <summary>
    ''' Gibt die GebaeudeBauID als Integer fuer das Netzwerk bzw. KI Gebaeude bauen zurueck
    ''' </summary>
    ''' <param name="GebaeudeID"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetGebaeudeZahlID(ByVal GebaeudeID As String) As Integer
        Select Case GebaeudeID.ToUpper
            Case "KRISTALL"
                Return 0
            Case "LASER"
                Return 1
            Case "MINIGESCHUETZ+N"
                Return 2
            Case "MINIGESCHUETZ+W"
                Return 3
            Case "MINIGESCHUETZ+O"
                Return 4
            Case "MINIGESCHUETZ+S"
                Return 5
            Case "MONOLITH"
                Return 6
            Case "SCHWARZE GESCHUETZ+N"
                Return 7
            Case "SCHWARZE GESCHUETZ+O"
                Return 8
            Case "SCHWARZE GESCHUETZ+S"
                Return 9
            Case "SCHWARZE GESCHUETZ+W"
                Return 10
            Case "SCHOCKLASER+S"
                Return 11
            Case "SCHOCKLASER+W"
                Return 12
            Case "SCHOCKLASER+O"
                Return 13
            Case "SCHOCKLASER+N"
                Return 14
            Case "OMEGARAKETE"
                Return 15
            Case "FESTUNG"
                Return 16
            Case "SILO"
                Return 17
            Case "FLIEGENDESMINIGESCHUETZ+N"
                Return 18
            Case "FLIEGENDESMINIGESCHUETZ+O"
                Return 19
            Case "FLIEGENDESMINIGESCHUETZ+S"
                Return 20
            Case "FLIEGENDESMINIGESCHUETZ+W"
                Return 21
            Case "FLIEGENDEFESTUNG"
                Return 22
            Case "MAUER"
                Return 23
            Case "BRUECKE"
                Return 24
            Case Else
                Return -1
        End Select
    End Function
    ''' <summary>
    ''' Gibt die GebaeudeBauID als String fuer das Netzwerk bzw. KI Gebaeude bauen zurueck
    ''' </summary>
    ''' <param name="ZahlID"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetGebaeudeStringID(ByVal ZahlID As Integer) As String
        Select Case ZahlID
            Case 0
                Return "KRISTALL"
            Case 1
                Return "LASER"
            Case 2
                Return "MINIGESCHUETZ+N"
            Case 3
                Return "MINIGESCHUETZ+W"
            Case 4
                Return "MINIGESCHUETZ+O"
            Case 5
                Return "MINIGESCHUETZ+S"
            Case 6
                Return "MONOLITH"
            Case 7
                Return "SCHWARZE GESCHUETZ+N"
            Case 8
                Return "SCHWARZE GESCHUETZ+O"
            Case 9
                Return "SCHWARZE GESCHUETZ+S"
            Case 10
                Return "SCHWARZE GESCHUETZ+W"
            Case 11
                Return "SCHOCKLASER+S"
            Case 12
                Return "SCHOCKLASER+W"
            Case 13
                Return "SCHOCKLASER+O"
            Case 14
                Return "SCHOCKLASER+N"
            Case 15
                Return "OMEGARAKETE"
            Case 16
                Return "FESTUNG"
            Case "SILO"
                Return 17
            Case 18
                Return "FLIEGENDESMINIGESCHUETZ+N"
            Case 19
                Return "FLIEGENDESMINIGESCHUETZ+O"
            Case 20
                Return "FLIEGENDESMINIGESCHUETZ+S"
            Case 21
                Return "FLIEGENDESMINIGESCHUETZ+W"
            Case 22
                Return "FLIEGENDEFESTUNG"
            Case 23
                Return "MAUER"
            Case 24
                Return "BRUECKE"
            Case Else
                Return "KRISTALL"
        End Select
    End Function
#End Region
#Region "KI"
    ''' <summary>
    ''' Erzeugt eine neue KI fuer den mitgegebenen Spieler
    ''' </summary>
    ''' <param name="Spieler"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function NewKI(ByVal Spieler As ObjektSpieler) As ObjektKI
        Select Case Spieler.KIStufe
            Case ObjektSpieler.KIStufen.Mensch
                Return Nothing
            Case ObjektSpieler.KIStufen.Kinderleicht
                Return New KIKinderleicht(Spieler)
            Case ObjektSpieler.KIStufen.Einfach
                Return New KIEinfach(Spieler)
            Case ObjektSpieler.KIStufen.Normal
                Return New KINormal(Spieler)
            Case ObjektSpieler.KIStufen.Passiv
                Return New KIPassivNetzwerk(Spieler)
            Case ObjektSpieler.KIStufen.Mittel
                Return New KIMittel(Spieler)
            Case ObjektSpieler.KIStufen.Schwer
                Return New AI_Heavy(Spieler)
            Case Else
                Return Nothing
        End Select
    End Function
#End Region
#Region "Bauliste"

    ''' <summary>
    ''' Gibt die Bauliste aus dem entsprechendem Spiel zurueck.
    ''' </summary>
    ''' <param name="Bauliste"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function GetBauliste(ByVal Bauliste As Baulisten) As String()
        Select Case Bauliste
            Case Baulisten.AW
                Return New String() {"INF", "MECH", "SPAEHER", "TTP", "ART", "JGPZ", "FLAK", "MISSILE", "RKW", "KPZ", _
                                   "T-HELI", "K-HELI", "JAEGER", "BOMBER", _
                                     "L-BOOT", "KREUZER", "U-BOOT", "SCHLFF"}
            Case Baulisten.AW_2
                Return New String() {"INF", "MECH", "SPAEHER", "TTP", "ART", "JGPZ", "FLAK", "MISSILE", "RKW", "KPZ", "TITANPZ", _
                                    "T-HELI", "K-HELI", "JAEGER", "BOMBER", _
                                      "L-BOOT", "KREUZER", "U-BOOT", "SCHLFF"}
            Case Baulisten.AW_DS
                Return New String() {"INF", "MECH", "SPAEHER", "TTP", "ART", "JGPZ", "FLAK", "MISSILE", "RKW", "KPZ", "LAEUFER", "TITANPZ", "MEGAPZ", MovementSorts.Hoellium.ToString.ToUpper, _
                                    "T-HELI", "K-HELI", "JAEGER", "BOMBER", "TARNK", "S-BOMBE", _
                                     "S-BOOT", "L-BOOT", "KREUZER", "U-BOOT", "SCHLFF", "FLTR"}
            Case Baulisten.CoW
                Return New String() {"INF", "MECH", "SSIEINHEIT", "SPAEHER", "TTP", "BAUPANZER", "TTL", "ART", "JGPZ", "FLAK", "HOVERFLAK", "MISSILE", "RKW", "KPZ", "LAEUFER", "HOVERCRAFT", "TITANPZ", "ABPZ", "SCHWERESHOVERCRAFT", "MEGAPZ", MovementSorts.Hoellium.ToString.ToUpper, _
                                     "T-HELI", "K-HELI", "AUFKLAERER", "JAEGER", "BOMBER", "ZEPPELIN", "TARNK", "T-FLUGZEUG", "S-BOMBE", _
                                      "S-BOOT", "L-BOOT", "VERSORGUNGSSCHIFF", "KREUZER", "U-BOOT", "ZERSTOERER", "SCHLFF", "FLTR"}
            Case Baulisten.CoWEmpty
                Return Nothing
            Case Baulisten.None
                Return New String() {}
            Case Baulisten.Groundforce
                Return New String() {"INF", "MECH", "SSIEINHEIT", "SPAEHER", "TTP", "BAUPANZER", "TTL", "ART", "JGPZ", "FLAK", "HOVERFLAK", "MISSILE", "RKW", "KPZ", "LAEUFER", "HOVERCRAFT", "TITANPZ", "ABPZ", "SCHWERESHOVERCRAFT", "MEGAPZ", MovementSorts.Hoellium.ToString.ToUpper}
            Case Baulisten.Airforce
                Return New String() {"T-HELI", "K-HELI", "AUFKLAERER", "JAEGER", "BOMBER", "ZEPPELIN", "TARNK", "T-FLUGZEUG", "S-BOMBE"}
            Case Baulisten.Seaforce
                Return New String() {"S-BOOT", "L-BOOT", "VERSORGUNGSSCHIFF", "KREUZER", "U-BOOT", "ZERSTOERER", "SCHLFF", "FLTR"}
            Case Baulisten.AW_DC
                Return New String() {"INF", "MECH", "MOTORRAD", "SPAEHER", "TTP", "FLARE", "FLAK", "JGPZ", "KPZ", "MEGAPZ", "ART", "PANZERABWEHRKANONE", "RKW", "MISSILE", _
                                     "JAEGER", "BOMBER", "AUFKLAERER", "WASSERFLUGZEUG", "T-HELI", "K-HELI", _
                                     "KANONENBOOT", "KREUZER", "U-BOOT", "FLTR", "SCHLFF", "L-BOOT"}
            Case Baulisten.CoW_2
                Return New String() {"INF", "MECH", "MOTORRAD", "SSIEINHEIT", "SPAEHER", "TTP", "BAUPANZER", "FLAK", "JGPZ", "KPZ", "TITANPZ", "MEGAPZ", "ART", "PANZERABWEHRKANONE", "RKW", "MISSILE", _
                                     "JAEGER", "BOMBER", "AUFKLAERER", "TARNK", "T-HELI", "K-HELI", _
                                     "L-BOOT", "KREUZER", "U-BOOT", "ZERSTOERER", "SCHLFF", "FLTR"}
            Case Baulisten.Ind_1
                Return DataSettings.EinheitenListe1.Split("|")
            Case Baulisten.Ind_2
                Return DataSettings.EinheitenListe2.Split("|")
            Case Baulisten.Ind_3
                Return DataSettings.EinheitenListe3.Split("|")
            Case Else
                Return Nothing
        End Select
    End Function
    Public Shared Function GetOrdner() As String
        Dim Ordner As String = "CW\"
        Select Case DataSettings.TerrainStyle
            Case TerrainStyle.AdvanceWars
                Ordner = "AW\"
            Case TerrainStyle.AdvanceWars2
                Ordner = "AW2\"
            Case TerrainStyle.CommanderWars
                Ordner = "CW\"
            Case TerrainStyle.AdvanceWarsDC
                Ordner = "AWDC\"
            Case TerrainStyle.CommanderWars2
                Ordner = "CW2\"
            Case TerrainStyle.CustomWars
                Return "Custom Wars\"
            Case TerrainStyle.CustomTerrainstyle1
                Ordner = "CT1\"
            Case TerrainStyle.CustomTerrainstyle2
                Ordner = "CT2\"
            Case TerrainStyle.CustomTerrainstyle3
                Ordner = "CT3\"
            Case Else
                Ordner = "CW\"
        End Select
        Return Ordner
    End Function
#End Region

#Region "3D"
    Public Shared Gebaeude3D As ObjektGebaeude3D
    Public Shared Einheit3D As ObjektEinheit3D

    Public Shared Sub Load3D()
        Load3DLandschaft()
        Load3DGebaeude()
        Load3DEinheiten()
        Symbol3D.Ini()
        TexturenHalter.Load3D()
    End Sub
    Private Shared Sub Load3DLandschaft()

    End Sub
    Shared Sub Load3DGebaeude()
        If Gebaeude3D Is Nothing Then
            Gebaeude3D = New ObjektGebaeude3D
            Gebaeude3D.IniGebaeude()
        End If
    End Sub
    Shared Sub Load3DEinheiten()
        If Einheit3D Is Nothing Then
            Einheit3D = New ObjektEinheit3D
            Einheit3D.IniEinheiten()
        End If
    End Sub

#End Region

End Class
